[백준] PS/Java [실랜디] 54

[백준 2346] 풍선 터뜨리기 - JAVA

https://www.acmicpc.net/problem/2346 덱 문제 리스트 기반으로 점화식을 세워서 풀었다.덱보다 성능은 좋을 것 같고, 대신 문제 난이도는 어려워졌다. 다음 풍선 위치 구하기 풍선에 쓰인 수가 양수 :1. 다음 인덱스 = (현재 인덱스 + 쓰인 수 - 1) % 현재 리스트 사이즈(-1 하는 이유 : 리스트에서 idx번째 원소를 remove했으므로, idx가 기존의 idx+1번째 원소를 가리키는 것 상쇄) 풍선에 쓰인 수가 음수 :1. 다음 인덱스 = (현재 인덱스 + 쓰인 수) % 현재 리스트 사이즈(왼쪽으로 탐색하니 -1 하지 않는다.) 2. 1번 값이 음수라면, 다음 인덱스 = 현재 리스트 사이즈 + 다음 인덱스(파이썬처럼 -1, -2가 size - 1, size - 2..

[백준 2811] 상범이의 우울

https://www.acmicpc.net/problem/2811 구현 문제 일단 모든 우울 구간에서 2T 만큼 꽃을 준다.최대 우울 구간 리스트를 순회하며, 각각 3T 만큼 꽃을 줘보고 최대값인 경우를 도출한다. flower는 너무 길어서 rose로 썼다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;class Main { public static void main(String[] args) throws IOException { Buff..

[백준 3107] IPv6 - JAVA

https://www.acmicpc.net/problem/3107 문자열, 파싱 문제인데 생각보다 복잡했고 여러 방법이 있을 것 같다. 배운 점 String.split(regex, limit)에서,limit를 -1로 지정해야 끝의 연속된 빈 필드까지 원소로 포함시킨다.문제에서 가능한 입력 중, 다음과 같은 경우 차이가 일어난다. input:::split(":") => [] size0의 배열split(":", -1) => [,,] => size3의 빈 배열 이유는,split(regex) == split(regex, 0) 이며,limit=0일 때는 끝에서 부터 내용이 존재하지 않는 곳은 포함하지 않는 것이 기본 동작이다. input::::a:::a::::output: Arrays.toString(spl..

[백준 2548] 대표 자연수 - JAVA

https://www.acmicpc.net/problem/2548 정렬했을 때, 모든 원소와 차이를 최소로 하는 숫자는 항상 중앙에 위치한다. 처음에 중앙 인덱스를 다음과 같이 표현했다.짝수 일 때 : (a.len / 2) - 1홀수 일 때 : a.len / 2 ac이후 다른 코드에서, 분기처리할 필요 없음을 알게 되었다.짝/홀수 일 때 : (a.len -1) / 2import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;class Main { public static void main(String[] args) throws IOException { B..

[백준 2713] 규현이의 사랑을 담은 문자메시지 - JAVA

https://www.acmicpc.net/problem/2713 구현 문제(매우 귀찮고 실수하기 쉬운 내용이 많은) 1. 파싱하기2. 5자리 이진수 코드 맵핑하기 [A-Z, 공백]3. 나선형 배열 채우기 파싱이 제일 어려웠다. 처음에 StringTokenizer을 쓰다가, 공백으로 구분하면 다음과 같은 케이스가 까다로움을 파악했다. 35 5 A A5 5 5 5 A 어느 경우던 토큰이 없어서 NPE거나, 제대로 못받는 등 처리가 어려웠다.이후 String.split() 에 limit를 지정할 수 있는 걸 찾아서 해결했다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;impo..

[백준 2716] 원숭이 매달기 - JAVA

https://www.acmicpc.net/problem/2716 분류는 스택/트리인데, 직접 사용하지 않아도 해결 가능하다. [ [] ] , [ [] [] ] -> 최대 높이 = 2[ [] [ [] ] ] -> 최대 높이 = 3 즉, 어떤 덩굴(트리)의 높이는, [] 모양으로 둘러쌓인 횟수를 의미한다. 1. 매 순간 [가 등장하면 h++하고, ]가 등장하면 h--한다. 동시에, max h값을 갱신한다. 2. 문제의 정의에 따라, 덩굴은 매 순간 두 개로 나눠진다.=> 높이가 1 증가할 때마다, 현재 높이에 매달린 원숭이 수의 두 배 만큼 분기한다. 3. 문제의 정의에 따라, 덩굴 마다 매달린 원숭이의 수는 모두 같아야 한다.=> 높이에 따라 여러 트리 모양이 나올 수 있지만, 노드의 수는 차이가 있어..

[백준 2578] 빙고 - JAVA

https://www.acmicpc.net/problem/2578 빙고 구현 문제최초 3빙고가 되는 시점을 출력한다.복잡도가 매우 널널해서 아무렇게나 구현해도 된다. 1. O(1)로 찾기 위해, 빙고판 대신 숫자별 r,c를 기록한다.2. 매번 탐색하지 않기 위해, 세로,가로,양 대각선을 카운트한다. (빙고판 및 사회자가 부르는 숫자는 유일하므로 가능)3. 부른 숫자의 r,c에 해당하는 카운트를 올리고, 5가 됐다면 빙고처리한다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;class Main { public static void ..

[백준 2002] 추월 - JAVA

https://www.acmicpc.net/problem/2002 재미있는 문제다. N=1000이기에 N^2 내에서 다양한 방법으로 구할 수 있다.나는 l1, l2 맨 앞의 원소를 비교해서, 불일치 시 O(N)으로 직접 빼주는 방법을 썼다.불일치는, 현재 차(l2에 있는)는 추월했음을 의미하기 때문이다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;class Main { public static void main(String[] args) throws IOException { int ans = 0..

[백준 2210] 숫자판 점프 - JAVA

https://www.acmicpc.net/problem/2210 그래프탐색 + 브루트포스 문제 배열이 5*5로 아주 작아서 아무 최적화도 하지 않았다.방문 여부 또한, 중복인 칸 방문을 허용하므로 고려하지 않아도 된다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashSet;import java.util.Set;import java.util.StringTokenizer;class Main { static Set set = new HashSet(); static int[][] m; public static void main(String[] args) t..