정해진 배열에서 찾는 문제만 풀다가 애매한 문제라고 생각이 들어서 코드를 짜는데 시간이 좀 걸렸다. bfs는 2차원 배열에서 주로 풀다보니까 1차원 배열에서 bfs를 쓴다는 생각을 못 했다. 단순하게 1차원 배열에서 주어진 조건에 따라 이동하면서 배열의 값을 1씩 증가 시키다가 동생을 만나면 종료하고 해당 인덱스의 값을 출력하는 식으로 풀었다. 코드에 주석을 달아놓았다! package sliver; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main_1697{ /* * 수빈이의 현재 위치에서 * 동생을 찾으러 가는데 걸리는 * 최단 시간 구하는 문제 * 1초에 +1, -1 * 순간이동..
알고리즘/BeakJoon
3차원 배열을 사용한 문제는 처음이라 조금 헤맸지만 2차원 배열과 크게 다른건 없었다. 날짜를 세는 조건을 맞추는 것이 어려웠지만 많은 공부가 된 문제였다. 코드에 상세하게 주석을 달아놓았다. package gold; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.List; import java.util.Queue; import java.util.StringTokenizer; public class Main_7569..
촌수 카운트를 어떻게 증가 시켜줘야 하는지 감을 못 잡아서 꽤 오래 걸린 문제다. distance 정보를 담고 있는 배열을 추가시켜서 해당 원소 인덱스에 +1 씩 증가 시켜주는 식으로 해결했다. package sliver; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.StringTokenizer; public class Main_2644 { /* * 촌수를 계산해야 하는 ..
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_1260 { //양방향 그래프를 생성해주기 위한 list 생성 static List[] adjList; //정점 개수, 간선 개수, 탐색 시작 정점 번호 static int N, M, ..
순열을 통해서 회전순서의 가능한 모든 경우를 구하고 각 경우 별로 배열을 돌려서 최소값을 찾는 문제이다. 조건이 많고 배열을 돌릴 때 이동하는 개념을 잘 이해하지 못 해서 푸는데 굉장히 오래 걸렸다. 중심좌표를 기준으로 배열을 그려보며 풀면 이해가 된다. 코드에 주석을 달아놓았다. package hw; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main_17406_배열돌리기4 { /* * 회전순서 순열을 구한다 * 구해진 순열마다 배열을..
1로 연결된 단지를 찾아서 총 몇개인지 출력하는 문제이다. BFS를 사용하여 연결되어 있는 부분을 찾고 visited 배열로 방문처리 하는 구현 방법을 생각해보았다. package sliver; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.StringTokenizer;..
재귀에 대한 개념이 부족하여 검색 후 코드를 리뷰하는 식으로 정리해보았다. package sliver; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main_2630 { /* * 분할정복, 재귀 문제 * 분할정복 단계 * 1. 현재 상태의 문제를 풀 수 없으면 분할 가능한지 확인 * 2. 문제를 작게 분할하여 풀이 * 3. 풀린 문제 합치기 */ //부분 색종이는 모두 같은 색상 //같은 색상이 아니라면 색종이를 절반씩 잘라서 같은 색이 될 떄까지 static int N; //배열 크기 static i..
package hw; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main_2563_색종이 { /* * 100 * 100 도화지 안에 검은색 색종이 붙임 * 색종이의 크기는 10 * 10 * 총 검은 영역의 넓이를 구하기 * 주어진 입력은 검은색 색종이의 왼쪽 아래 꼭지점의 좌표를 줌 */ static int N; //색종이 수 static int [][] sketch; //스케치북 public static void main(String[] args) throws NumberFormatException..