본문 바로가기

백준 문제 풀이53

(#4963 Java) 섬의 개수 문제 이해 건너갈 수 있는 경로가 있으면 같은 섬에 있다고 보고, 섬의 개수를 세는 문제이다. 이 문제는 dfs/bfs 문제로 풀 수 있다. 따로 테스트 케이스가 몇 개인지 주어지지 않고, w,h로 0이 주어지면 프로그램이 종료되므로, 0을 2개 입력 받기 전까지 반복해주면 된다. 그럼 문제를 해결해보자. 문제 해결 우선 내가 처음부터 생각하지 못했던 부분은 대각선도 이동할 수 있다는 부분이다. 상하좌우까지만 좌표설정을 해보았는데, 대각선은 처음이다. 대각선 이동은 (상+좌), (상+우), (하+좌), (하+우)의 네 가지 경우가 있으므로 아래와 같이 설정하면 된다. static int[] dx = {-1, -1, -1, 0, 0, 1, 1, 1}; static int[] dy = {-1, 0, 1, -.. 2024. 3. 5.
(#11724 Java) 연결 요소의 개수 문제 좀 잘 읽자...!! N이 1부터인데, 이번에도 습관처럼 계속 반복문의 범위를 for (int i = 0; i < N; i++) { } 이렇게 해서 계속 틀렸다...ㅎ 정신차렷~~~~!! 문제 해결 역시나 static 변수로 설정할 것들 먼저 선언해주자! static int N,M; static int[][] Graph; static boolean[] Visited; static int count; dfs 함수이다. N 범위 주의!!!!! public static void dfs(int node) { Visited[node] = true; for (int i = 1; i < N+1; i++) { //N이 1부터이므로 범위 설정 주의!! if(!Visited[i] && Graph[node][i] ==.. 2024. 3. 4.
(#1012 Java) 유기농 배추 문제 해결 dfs 문제로 풀 수 있는 문제이다. static으로 main 밖에서 선언할 것들을 선언해준다. static int T; static int M,N,K; static int[][] Graph; static boolean[][] Visited; //방문 여부 static int count; static int[] dx = {0, -1, 0, 1}; //좌우 static int[] dy = {-1, 0, 1, 0}; //상하 dfs 함수를 만들어준다. 배추흰지렁이는 상하좌우로 모두 움직일 수 있으므로 반복문의 범위를 4번 반복하도록 설정해준다. 각각 행/열의 새로운 좌표를 만들어준 후, 새로운 좌표의 범위 체크, 방문여부 체크, 1인지 아닌지 체크 (배추가 위치해있는 곳)를 한 후 모든 검증이 끝.. 2024. 3. 4.
(#2606 Java) 바이러스 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 진짜 짜증나 죽는 줄 알았다... 분명 내 로컬에서는 답이 잘 나오는데, 왜 계속 이러는 거지 했는데, 진짜 어이없는 실수였던 것,,, i가 곧 node 번호인 걸 잊고 그냥 습관처럼 0부터 했다가 난 실패 메세지였다. 1번부터 방문하기 때문에 1부터 넣어주어야 한다.. 문제 해결 이것도 DFS/BFS 두 가지 방법으로 풀 수 있는데 나는 DFS에서 재귀 방법을 선택했다. DFS/BFS 문제를 풀기 위해 필요한 것들을 세팅해주자. 최종적으로 웜 바이러스에 걸리게 되는 컴퓨터의 수를 출력해주어야 하므로 추가로 count 변수도 만들어주자. static int N, E; //컴퓨터 수, 연결된 선의 개수 static int[][] Graph; static boolean[] Visited;.. 2024. 2. 29.
(#1260 Java) DFS와 BFS 문제 해결 그냥 대놓고 BFS와 DFS를 구하라고 하는 문제이다. 그냥 전형적인 방식으로 수월하게 코드를 작성하고 있었는데, 생각보다 꽤 많은 문제에 부딪혔다. 우선 Gragh와 Visited 배열을 main함수 밖에 크기까지 선언해서 계속 범위 오류가 났다. 이 부분을 주의해서 코드를 보면 좋을 것 같다. 또한, 원래 dfs를 구현할 때 재귀를 이용하는 게 훨씬 쉽지만, 이번에는 스택을 이용했다가, 문제에서 요구하는 작은 번호의 정점을 먼저 방문하는 조건을 충족하지 못 해 그냥 추가적인 코드를 짜지 않고 재귀를 이용하는 코드로 바꿨다...ㅎ 먼저 크기를 정하지 않고 static으로 main 함수 밖에 변수들을 선언해준다. static final int Max_N = 1000; static int N, .. 2024. 2. 29.
(#16173 Java) 점프왕 쩰리 (Small) 전형적인 dfs 코드이다. DFS/BFS 문제가 코테에서 가장 많이 나오는 문제 유형이라고 한다. 아직 문제를 풀어본 경험이 없어 문제를 풀기 전 유튜브에서 문제 유형들과 기본적인 기초들을 공부했는데, 기본적인 틀은 정해져있는 것 같았다. 문제를 보고 어떻게 구상해야할지 연습이 많이 필요할 것 같다. 문제 해결 먼저 정사각형의 구역에서 젤리가 움직인다고 하니 칸 수를 입력받을 N과 2차원 배열, dfs에서 필수적인 boolean 타입의 방문여부 배열을 선언해준다. 또한 젤리가 오른쪽과 아래 방향으로만 움직일 수 있다고 했으니 이를 위한 좌표 값들을 만들어주자. static int N; static int[][] arr; static boolean[][] visited; //방문 여부 static int[.. 2024. 2. 28.
반응형