조건이 많아서 너무 어려운 문제다. DFS를 기본으로 주어진 조건을 구현하는 문제였는데 이해하기 쉽지 않다. 다른 사람 코드를 참고해서 풀어봤는데 다시 복습이 꼭 필요한 문제같다. 코드에 주석을 달아놓았다. package Beakjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main_14503 { static int N, M; //배열 가로 세로 크기 static int r, c, d; //x좌표, y좌표, 방향 static int[][] arr; //배열 static boolean[][] v..
알고리즘/BeakJoon
맨해튼거리가 1000 이하면 갈 수 있다는 조건으로 dfs를 사용해서 풀었다. 코드에 주석을 자세하게 달아놓았다. package Beakjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; import java.util.StringTokenizer; public class Main_9205 { /* 50미터 당 한병씩 맥주 마셔야 함 1000미터에 20병 편의점에서 새 맥주 살 수 있음 가지고 있을 수 있는 맥주 최대 20병 */ static int T; //테스트케이스 static int N; //편의점 개수 //xy 좌표값을 갖는 c..
배열 전체를 0으로 채우고 직사각형 부분만 1로 바꾼 다음 0을 기준으로 bfs 돌려서 해결하였다. 코드에 주석을 자세하게 달아놓았다. package sliver; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.StringTokenizer; public class Main_2583_영역구하기 { /* * 왼쪽아래 꼭지점부..
일반인과 적록색약을 가지고 있는 사람의 두가지 경우를 나누어서 dfs를 짜면 어렵지 않게 풀 수 있는 문제였다. 코드에 주석을 자세하게 달아놓았다. package Beakjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main_10026 { /* 적록색약 -> 빨강과 초록을 동일하게 인식 일반인과 적록색약이 보는 구역의 수를 각각 구하기 일반인 -> 빨강, 파랑, 초록 적록색약 -> 빨강+초록, 파랑 */ static int N; //배열 크기 static char [][] arr; static boolean [][] visited; static bool..
bfs를 돌면서 빙산의 4방에 바다가 몇개 있는지를 list에 담아놓고 한번에 녹여주었다. 반복을 돌 때마다 배열이나 리스트를 초기화 시켜주어야 하기 때문에 생각을 많이 해야하는 문제였다. 코드에 주석을 자세하게 달아놓았다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.Buffer; import java.util.*; public class Main { /* 4방탐색 후 0의 개수만큼 얼음이 녹음 두 덩어리 이상으로 분리되는 최초의 시간을 구하기 두 덩어리 이상 분리 안 되면 0 출력 DFS로 풀어보자 DFS + BFS로 풀어야 할 듯???? */ stat..
치즈 바깥쪽 공기와 치즈 안쪽의 공기를 구별해서 치즈를 녹여야 했는데 어떻게 구분해야 하는지 고민을 오래 했다. 반대로 바깥쪽 공기를 기준으로 닿아있는 치즈들만 표시해 준 다음에 한꺼번에 녹여주는 방식으로 생각을 바꿔보니 쉽게 이해가 되었다. 코드에 주석을 자세하게 달아놓았다. package gold; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main_2636 { /* * 공기와 닿아있는 치즈는 한시간 간격으로 녹음 치즈 내부의 0은 치즈를 녹이지 못 함..
숨바꼭질이랑 거의 비슷한 문제였다. up의 경우와 down의 경우를 나누어서 bfs를 돌리니 쉽게 풀 수 있었다. package Beakjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main_5014 { /* s에서 출발해서 g까지 도달하는데 눌러야 하는 버튼 수의 최솟값을 구하는 문제 bfs를 활용해서 풀어보자 */ static int f, s, g, u, d; //주어지는 변수들 static in..
DFS로 문제를 해결하였다. 처음에는 내리는 비의 양이 정해지지 않아서 이해를 못 했는데 배열에 들어가 있는 비를 list에 넣어주고 그만큼 반복을 돌리니 해결되었다. 방문처리 배열을 전역변수로 선언하고 반복을 돌기 전에 초기화를 시키고 문제를 풀었더니 계속 오답이 떴다. list에 저장된 비의 양이 바뀔 때마다 새로운 방문처리 배열이 필요하니까 반복문 안에서 초기화 해주는 것을 주의하자! package Beakjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util..