본문 바로가기

알고리즘

[백준 3197] 백조의 호수 (Java) https://www.acmicpc.net/problem/3197 3197번: 백조의 호수 문제 두 마리의 백조가 호수에서 살고 있었다. 그렇지만 두 마리는 호수를 덮고 있는 빙판으로 만나지 못한다. 호수는 가로로 R, 세로로 C만큼의 직사각형 모양이다. 어떤 칸은 얼음으로 덮여있� www.acmicpc.net 풀이 문제를 처음 보고 다음과 같은 방법으로 시도를 했다. 1. BFS로 얼음을 녹이고 map을 업데이트 시킨다. 2. 해당 map에서 두 백조가 만날 수 있는지 BFS 탐색을 시도한다. 3. 만날 수 없다면 day++를 하고 1, 2번을 반복한다. 4. 만나는 경우에 day를 출력한다. 위 방법으로는 시간 초과가 발생할 수 있다. 예를 들어 백조가 만날 수 있는 날이 n일차라면 (이 n이 아주 ..
[백준 1665] 가운데를 말해요 (Java) https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 수빈이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 수빈이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 풀이 배열이나 ArrayList를 이용하여 풀이를 시도하였더니 메모리초과, 시간초과 문제가 발생했다. MaxHeap, MinHeap 개념을 이용하여 문제를 풀었다. (Heap은 PriorityQueue로 구현) 입력받는 숫자를 MaxHeap과 MinHeap에 번갈아 가면서 add를 하되, MaxHeap의 첫번째 값과 MinHeap의 첫번째 값을 비교했을 때 (MaxHaep.peek..
[백준 9012] 괄호 (Java) https://www.acmicpc.net/problem/9012 접근 방법 - 문자열 차례대로 '(' 가 나온 만큼 ')' 이 따라서 나와야 VPS가 된다. - 문자열을 차례로 읽으면서 '(' 가 나오면 Stack에 push하고 ')' 가 나오면 pop을 한다. - 문자열을 다 읽은 뒤 Stack이 비어있으면 VPS, 그렇지 않으면 일반 문자열로 분류한다. - 문자열에 ')'가 먼저 나오는 경우, 이후 문자열과 상관없이 VPS는 될 수 없다. 최종 코드 import java.util.Scanner; import java.util.Stack; public class Main { private static final String YES = "YES"; private static final String NO..