2025/02/05 7

[백준] 2573번: 빙산 - JAVA

문제   풀이 한 개의 빙산이 두 개 이상의 빙산으로 쪼개지는 데 걸리는 시간을 구하는 문제이다.빙산의 개수를 구하는 Method, 빙산을 녹이는 Method로 나누어서 풀이했다. 행의 개수 N, 열의 개수 M을 입력받는다. N x M의 크기를 가지는 2차원 Integer 배열을 선언하고 입력값을 저장한다. 얼음이 다 녹을 때까지 반복하며 빙산 덩어리의 수를 확인한다. 빙산 덩어리가 1개 초과라면 반복된 날짜를 출력한다.빙산 덩어리가 1개라면 얼음을 녹인다.영역을 순회하며 얼음을 찾는다.인접된 영역이 물인 수만큼 얼음을 녹인다. 이 때, 먼저 확인한 얼음이 녹아 물이 된 경우에는 녹이지 않는다. 아래 그림에서 3인 얼음의 인접인 물이 3이기 때문에 물이되지만 4인 얼음은 인접 물 3개의 영향만 받는다. ..

백준 2025.02.05

[백준] 2468번: 안전 영역 - JAVA

문제   풀이 높이가 가장 큰 영역을 MAX로 두고 비의 양을 1부터 반복하여 비의양별 안전영역의 수를 구하는 방법으로 풀이했다.영역의 가로세로 크기(N)를 입력받는다.N의 크기만큼의 Integer 2차원 배열을 생성하고 배열에 값을 입력받는다. 이중 가장 큰 값을 maxNum로 입력한다. maxNum만큼 반복하며 각 비의양별 안전영역을 구한다.비의양보다 높은 영역인 경우 안전영역이며, 인접영역이 안전영역인지 탐색한다.새로운 안전영역을 발견할경우 count를 올린다.각 비의양별 안전영역 개수를 비교하여 가장 큰 값을 출력한다. 정답 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class..

백준 2025.02.05

[백준] 5014번: 스타트링크 - JAVA

문제 풀이전체 층수(F), 스타트링크 위치(G), 강호의 위치(S), 엘리베이터의 올라가는 수(U), 엘리베이터의 내려가는 수(D)를 입력받는다.F크기의 방문을 확인하는 Integer 배열을 만든다.queue를 선언하고 S를 추가한다.S와 G가 같다면 0을 출력한다.queue가 비어있을 때까지 반복하며 queue에서 값(q)을 꺼낸다. 위로 이동하는 범위(S+U), 아래로 이동하는 범위(S-D)를 구한다.U나 F의 값이 0보다 크고 최대층수보다 작거나 같고 0보다 크고 배열의 해당 위치에 방문한적이 없다면 queue에 추가한다.q가 G와 같으면 배열의 q위치값을 출력한다.이동할 수 있는 모든 층을 탐색하는 동안 같지 않으면 "use the stairs"를 출력한다.   정답 코드import java.io..

백준 2025.02.05

[백준] 1697번: 숨바꼭질 - JAVA

문제  풀이문제에 주어진 최대값(100,000)의 Integer 배열(check)을 생성한다.수빈이(N)와 동생(K)의 위치를 입력받는다.queue를 생성하고 N을 추가한다.check[N] 값을 1로 입력한다. queue가 비어있을 때까지 반복하며 queue에서 값(q)을 꺼낸다.3번 반복하며 q + 1, q - 1, q * 2 값(next)을 구한다.next가 K인 경우 check[q]를 출력한다.next가 최대값보다 작고, 0보다 같거나 크고, check[next]에 값이 0인 경우check[q] + 1을 check[next]에 입력한다.   정답 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;pu..

백준 2025.02.05

[백준] 7569번: 토마토 - JAVA

문제  풀이토마토 박스의 가로, 세로, 높이를 입력받는다.입력받은 가로, 세로, 높이를 가진 토마토 박스 3차 배열을 만든다.익은 토마토의 주변을 찾기 위한 queue를 정의한다.(가로, 세로, 높이를 가진 객체 queue)입력값을 받아 토마토 박스에 넣는다.(0 - 안익은 토마토 / 1 - 익은 토마토 / -1 - 비어있음)익은 토마토일 경우 queue에 해당 위치를 추가한다. queue가 빌 때까지 반복하며 익은 토마토의 상, 하, 좌, 우, 위, 아래를 확인한다.익지 않았을 경우 익은 토마토의 값에 1을 더하여 토마토 박스에 해당 위치를 입력하고 queue에 추가한다.queue가 비었으면 토마토 박스를 확인하여 안 익은 토마토가 있다면 -1을 출력한다.모두 익은 토마토인 경우 가장 큰 값에 -1을 ..

백준 2025.02.05

[백준] 2644번: 촌수계산 - JAVA

문제   풀이 전체 사람 수, 촌수를 계산해야하는 대상(A, B)을 입력받는다.사람수만큼의 2차 배열을 만들고 자식관계를 입력받아 1로 변경한다. Ex) 전체 사람이 3명이고 1-2, 1-3의 관계를 받은 경우 012300000100112010030100 대상 A의 촌수를 저장하는 1차 배열을 만들고 0으로 초기화한다.DFS알고리즘을 사용하여 가족수만큼 반복하고, 대상 A를 기준으로 나머지 가족과의 촌수를 계산한다.A와 관계가 있는 대상(A1)인 경우 1, (A1)을 기준으로 재반복하여 해당 대상과 관계가 있는 대상(A2)은 2, A2를 기준으로 관계가 있는 대상(A3)은 3... 으로 반복하여 모든 대상과의 촌수를 입력한다.배열의 대상B 위치의 값이 0이라면 -1을 값이 있다면 값을 출력한다.  정답..

백준 2025.02.05

[백준] 1012번: 유기농 배추 - JAVA

문제     풀이전체 배추밭을 2차 배열 구조로 만듭니다.배추의 위치를 입력받아 해당 위치를 1로 변경합니다.배추밭의 0, 0부터 마지막까지 반복하며 배추가 있고, 방문하지 않은 경우 인접한 배추를 모두 찾아 방문으로 변경하고변경이 완료되면 지렁이의 수를 1 증가시킵니다.인접한 배추는 DFS(깊이 우선 탐색) 알고리즘을 사용하여 찾습니다.배추의 위치에서 상하좌우를 확인하여 배추가 있는 경우 방문으로 변경하고,그 배추의 위치에서 다시 탐색하여 인접한 배추를 모두 찾습니다. 정답 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class Main { static int count; stat..

백준 2025.02.05