본문 바로가기
[JAVA] 백준 2636 - 치즈 https://www.acmicpc.net/problem/26362638 치즈와 정확히 똑같은 문제인데, 치즈가 다 녹기 전 마지막 개수를 세는 부분이 추가된 문제이다.나이스import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class Main { static int[] dx = {1, -1, 0, 0}; static int[] dy = {0, 0, 1, -1}; public static void main(String[] args) throws IOException { BufferedReader br = new B.. 2025. 9. 6.
[JAVA] 백준 2638 - 치즈 https://www.acmicpc.net/problem/2638빈공간과 2변 이상 인접한 치즈를 1시간마다 녹여가며 모두 빈 공간으로 만드는 데 걸리는 시간을 출력하는 문제이다.첫번째로 고려한 항목은 빈공간 판단으로 빈 공간에 대해 dfs를 돌렸을 때 가장자리에 닿는지 아닌지로 고립 여부를 판단했다.두번째는 이를 기반으로 녹여야하는 치즈를 정하는 것이었다.가장자리에 닿지 않는(치즈로 둘러쌓인) 빈 공간을 2로 치환하고 녹여야하는 치즈를 3으로 치환한 뒤카운트를 하나 올린 후 2와 3을 0으로 치환해 모든 칸이 0이 될때까지 반복했다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import.. 2025. 9. 6.
[JAVA] 백준 5052 - 전화번호 목록 https://www.acmicpc.net/problem/5052특정 전화번호 전체가 다른 문자열의 Prefix인 경우가 있는지를 확인하는 문제이다.전화번호 10000개에 대해서 각각 String.StartWith 함수를 쓰는 방식으로 구현한다고 생각하면 10000*10000*startWith함수 시간복잡도니까 시간초과가 발생할 거라고 생각하고 시도도 하지 않았다.그렇게 고민하다가 점점 이상한 방향으로 생각이 흘러가게 됐다.JAVA stream API의 groupingby로 그룹핑 조건 문자열의 길이를 점점 늘려가면서 혼자 그룹핑된 문자열을 리스트에서 지워가며 list size가 0이 될때까지 반복할 때 아무리 문자열의 길이를 늘려도 list의 size가 0으로 줄어들지 않다가 결국 indexoutofb.. 2025. 9. 5.
[JAVA] 백준 2206 - 벽 부수고 이동하기 https://www.acmicpc.net/problem/2206전형적인 BFS문제처럼 보이지만 벽을 하나 부술 수 있는 문제라서 상당히 복잡했다.핵심 개념을 떠올리기가 힘들어서 일단 바이러스 문제처럼 브루트포스식으로 해봤는데 시간이 어림도 없었다.결국 핵심 개념은 특정 좌표 (X,Y)까지 도착했을 때 벽을 부쉈는지 안 부쉈는지의 상태를 저장할 수 있어야하고, 그에 따라 경로도 완전히 달라지기 때문에 별도로 관리되어야 한다는 점이다.그래서 방문체크배열을 3차원으로 추가해 [x][y][벽부쉈는지] 형식으로 작성하고 BFS를 돌리다가 벽을 만나면 부수고 부순쪽의 방문체크를 하고 길을 만난 경우에는 부수지 않는 쪽의 방문체크를 하면서 목적지인 (N,M)에 도달해서 최단경로가 산출됐는지를 체크했다. import.. 2025. 9. 4.