[Java] 백준 24955 숫자 이어 붙이기 (G4)
·
백준
문제 해결 전략숫자를 이어붙이는 문제였다.처음에는 문제를 잘못 이해해서 각 집에 붙어 있는 수를 반대로도 뒤집을 수 있는 줄 알았는데, 그냥 순차적으로 이어붙이는 문제이다.BFS를 통해 각 집을 방문한다면 어렵지 않게 이어 붙인 수를 구할 수 있다.그러나 이 문제의 킥은 그게 아니였다.집에 붙어 있는 숫자가 1,000,000,000일 수 있기 때문에 long을 사용해도 String → Long에서도 NumberFormatException이 날 수 있다.그냥 수를 계속 더하는 것이면 Modular의 분배 법칙을 사용할 수 있다.근데 이 문제는 수를 이어 붙이는 것이다. 이를 위해서는 곱셈에 대한 분배법칙도 사용하여야 한다.이를 이용하면 두 수를 붙일 때도 모듈러 연산을 할 수 있고 오버플로우를 방지할 수 ..
[Java] 백준 13460 구슬 탈출 2 (G1)
·
백준
게임 판을 움직여서 구슬을 탈출시켜야 하는 그래프 문제이다.문제 해결 전략이 문제는 판을 기울여 공을 굴러가게 하여 빨간 구슬만 구멍을 빼는 것이다.판을 움직인다는 것은, 공이 끝까지 굴러가서 벽에 부딛히거나 or 구멍에 빠지거나 라는 결론을 맞이하게 된다.그래서 move라는 함수를 두어 공이 어디까지 굴러갈 것인지 구하였고,두 공이 움직일 때 독립적으로 계산하면 같은 위치에서 멈출 가능성이 있다. 이런 경우에는 더 많이 굴러온(멀리서 굴러온)공이 가까이서 굴러온 공에 의해 멈출 것임으로 이동방향을 한번 빼 주었다.또한, 빨간 공이 구멍을 통해 나왔는데 파란 공도 구멍을 통해 나오는 경우가 있고, 파란 공만 나오는 경우가 있다.이런 경우는 유효한 경우가 아니기 때문에, 먼저 파란 공이 구멍을 통해 나오는..
[Java] 백준 9328 열쇠 (G1)
·
백준
열쇠를 찾고, 문을 열어서 문서를 가져와야 하는 심화 BFS 문제이다.문제 해결 전략다른 그래프 문제보다 까다롭고 어렵게 만드는 요소는 문과 열쇠다.열쇠를 찾고 문을 열어야 하기 때문이다.문제를 보고 가장 먼저 고안한 로직은 다음과 같다.입구를 찾는다(벽이면 입구로 사용할 수 없음)열쇠를 찾는다.문이 나오면 문을 연다.(만약 열쇠가 있을 시)문서를 찾고 ans++을 수행한다.하지만 다시 생각을 해보니 열쇠를 찾기 위하여 문을 열어야 할 수 있다.따라서 다시 고안한 로직은 다음과 같다.입구를 찾는다(벽이면 입구로 사용할 수 없음)bfs를 수행한다.문이 나오면 열쇠가 있는지 확인하고 있다면 연다.문이 나왔는데 열쇠가 없다면 문의 위치를 기록한다.(Map사용)만약 열쇠가 나오면 열쇠를 저장한다.(Set사용)그..
[Java] 백준 2573 빙산 / G4
·
백준
문제https://www.acmicpc.net/problem/2573 입 / 출력입력첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 나타내는 M개의 정수가 한 개의 빈 칸을 사이에 두고 주어진다. 각 칸에 들어가는 값은 0 이상 10 이하이다. 배열에서 빙산이 차지하는 칸의 개수, 즉, 1 이상의 정수가 들어가는 칸의 개수는 10,000 개 이하이다. 배열의 첫 번째 행과 열, 마지막 행과 열에는 항상 0으로 채워진다.출력첫 줄에 빙산이 분리되는 최초의 시간(년)을 출력한다. 만일 빙산이 다 녹을 때까지 분리되지 않으면 0을 출력한다.문제 해결 전략..