본문 바로가기

전체 글

(88)
백준 1525 <퍼즐> 이 문제는 어떻게 하면 메모리를 효과적으로 관리하면서 방문처리를 해주는가에 집중이 필요한 문제였다. 그래서 나는 이문제의 맵의 상태를 String으로 만들어 hashmap에 관리함으로써 메모리를 줄여 나갔다. 문제 풀이 각각의 맵의 상태를 String으로 저장해서 count와 함께 현재 비어있는 위치를 보관하는 class를 선언했다. 비어있는 위치에서 4방향으로 검색한 뒤 string으로 만들고 hashmap에 저장되어있으면 패스하고 저장 안 되어있으면 hashmap에 넣어주고 queue에도 넣어주었다. 현재 상태를 배열그대로 저장하게 되면 메모리를 많이 차지하기 때문에 줄여주었다. 다음 방향 숫자와 현재 위치의 0을 바꿔주고 string으로 출력하는 과정이다. 이러한 과정이 계속 반복되고 결과와 같다면..
백준 1756 <피자 굽기> 문제 풀이 1. 오븐의 깊이를 위에서부터 넣으면서 현재까지 가장 좁은 길이를 다음 깊이에 넣는다. 2. 이분 탐색을 이용해서 피자를 어디 위에 올릴 수 있는지 알아낸다. 3. 피자를 올린 깊이와 맨 위의 깊이 사이를 계속해서 이분 탐색한다. 4. 올릴 수 없다면 음수가 될 것이다. 생각이 많이 필요했던 문제 중 하나이다. 골드 5라는 수준을 못 믿었던... 일단 문제를 보면 완 탐으로 풀면 되지 않을까? 했지만 그렇게 되면 300000^2 이므로 당연히 터진다. 그렇다면 생각할 부분은 어떻게 자신보다 크거나 같은 아래쪽에 넣을 수 있을까를 먼저 생각해야 한다. 문제 풀 결국은 위에서 넣었을 때 자신보다 작은 지점 바로 위층에 쌓이게 되는 것이다. 이 지점을 찾는 것은 의외로 생각만 한다면 간단해질 것이다..
백준 14698 <전생했더니 슬라인 연구자였던 건에 대하여(HARD)> 이 문제의 핵심은 어떻게 큰 수를 적게 곱하는가이다. 이렇게 슬라임이 있다면 이렇게 이렇게 작은 수를 먼저 곱하는 게 적절할 것이다. 그러므로 작은수끼리 먼저 곱하는 게 적절하니 우선순위 큐를 사용하면 되는 문제이다. 이 문제에서 어려웠던 점은 long값의 계산이었다. 이러한 값이 넘어가는 것을 잘 처리한다면 쉽게 풀리는 문제 유형이다. 전체 코드 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Main { static int divide=1..