ALGORITHM 100

[프로그래머스] 2019 카카오 개발자 겨울 인턴십 징검다리 건너기 java

programmers.co.kr/learn/courses/30/lessons/64062 코딩테스트 연습 - 징검다리 건너기 [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3 programmers.co.kr class Solution { public int solution(int[] stones, int k) { int answer = 0, left = 0, right = Integer.MAX_VALUE; while(left =k) return false;//건널수 없음 } else count = 0; } return true; } }

[프로그래머스] 스타 수열 java

programmers.co.kr/learn/courses/30/lessons/70130 코딩테스트 연습 - 스타 수열 programmers.co.kr /* * * 조건 1 : 스타수열 길이 2이상 * 조건 2 : 인접한 2개의 값씩 묶었을 때, 모든집합에서 교집합 원소 갯수 1개 이상 * 조건 3 : 인접한 2개의 값씩 묶었을 때, 각 집합에 있는 2개의 값은 서로 다른 값 * * */ class Solution { public static int solution(int[] a) { int answer = 0; int[] count = new int[a.length];//a 원소의 등장횟수 for (int i = 0; i < a.length; i++) count[a[i]]++; for (int i = 0..

[프로그래머스] 짝지어 제거하기 java

programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr import java.util.Stack; class Solution { public static int solution(String s){ int answer = 0; Stack stack = new Stack(); for (int i = 0; i < s.length(); i++) { if(stack.isEmpty()) stack.push(s.charAt(i))..

[백준] 1244 스위치 켜고 끄기 java

www.acmicpc.net/problem/1244 1244번: 스위치 켜고 끄기 첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩 www.acmicpc.net import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt()+1; int[] sw = new int[n]; for (int i = 1; i < n; i++) { sw[i] = sc.nextInt(); } int ..

[백준] 1543 문서 검색 java

www.acmicpc.net/problem/1543 1543번: 문서 검색 세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한 www.acmicpc.net 문제 풀이 : substring 함수로 찾아야 할 문자열의 길이만큼 검사하고 같은 문자라면 i를 증가시켜줍니다. import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); String doc = sc.nextLine(); String find = sc.nex..

[백준] 평범한 배낭 java

www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 문제 풀이 : 배낭이 비어있는 상태에서 시작하여 물건을 하나씩 배낭에 담는 것을 현재 배낭에 들어있는 물건의 가치가 큰 것을 고르면서 배낭 용량의 무게를 검사해야합니다. 1. dp[i-1][j] : 물건 i를 포함하지 않습니다. 즉 그 전과 동일합니다. 2. dp[i-1][j-w[i]]+v[i] : 물건 i를 포함합니다. 물건 i의 가치 + 물건..

[프로그래머스] 등굣길

programmers.co.kr/learn/courses/30/lessons/42898 코딩테스트 연습 - 등굣길 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = programmers.co.kr 문제 설명 : m X n 크기의 격자모양에서 집이 있는 좌표는 (1,1)이고 학교가 있는 좌표는 (m,n) 입니다. 오른쪽과 아래쪽으로만 움직여 집에서 학교까지 갈 수 있는 최단 경로의 개수를 1,000,000,007로 나눈 나머지를 출력하기 문제 풀이 : 2차원 배열 map을 만들어서 puddles 좌표(물 웅덩이를) 위치를 -1로 초기화 해둡니다. 집이 있는 좌..

[백준] 9465 스티커

www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 문제 설명 : 스티커 점수의 최댓값 구하기 문제 풀이 : 처음에는 대각선끼리만 구한 뒤 마지막의 이전 열부터는 최댓값을 구해서 더하면 되는 줄 알았는데 완전히 틀렸습니다. 변을 공유하기 때문에 이전 대각선과 현재값을 더한 것과 이전의 전 대각선의 값과 현재값을 더한 것을 비교하여 최댓값을 구하는 방식입니다. 이전의 전 대각선을 구하는 이유는 이전 대각선을 선택하지 않을 때도 있기 때문입니다. impo..

[프로그래머스] 네트워크

programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr 문제 풀이 : 처음에 사방 탐색으로 연결된 개수를 구하려고 해서 틀렸습니다. 1 0 1 0 1 0 1 0 1 이러한 배열이 있을 때 사방 탐색으로 하면 답이 5지만 실제 답은 2입니다. 그렇기 때문에 DFS를 활용하여 N크기의 visited 배열을 만들어 모든 행의 방문 처리를 확인하면서 답을 구합니다. 방문하지 않은 배열을 DFS 로 들어가서 1. 방문처리를 해주고 2..

[백준] 11660번 구간 합 구하기 5

www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 문제 설명 : (x1,y1) 부터 (x2,y2) 까지 합을 구하기 문제 풀이 : 1. 원래의 배열에서 각 구간을 합해준 dp 배열을 만들어줍니다. ex) dp 배열의 8은 3 + 3 에서 중복된 1을 뺀 뒤에, 원래 배열의 3을 더한 것 입니다. dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + n dp[2][2] = dp[1..