본문 바로가기

분류 전체보기

(229)
[7562] 나이트의 이동 import java.util.Scanner; import java.util.Queue; import java.util.LinkedList; // 7562 나이트의 이동 public class Main { static int [][] map; static Queue queue; static boolean [][] visited; static int I, X, Y, cnt; static int[][] temp = {{1,2},{-1,2},{1,-2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for(int..
[2293] 동전 import java.util.Scanner; import java.util.ArrayList; import java.util.Collections; // 2293 동전 1 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int [] DP = new int[k+1]; int [] arr = new int[n]; for(int i=0; i
[1012] 유기농 배추 import java.util.Scanner; // 1012 유기농 배추 public class Main { static int [][] arr; static boolean [][] visited; static int [][] temp = {{1,0},{0,1},{-1,0},{0,-1}}; static int M, N, K; public static void main(String args[]) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for(int i=0; i
[1057] 토너먼트 import java.util.Scanner; // 1057 토너먼트 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int Kim = sc.nextInt(); int Lim = sc.nextInt(); int cnt = 0; if (N < Kim || N < Lim) { cnt = -1; } else { while (true) { if (Kim == Lim) break; else { Kim = (Kim + 1) / 2; Lim = (Lim + 1) / 2; cnt++; } } } System.out.println(cnt); } } 시뮬레이..
[1966] 프린터 큐 import java.util.Scanner; import java.util.Queue; import java.util.LinkedList; // 1966 프린터 큐 public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int tc = sc.nextInt(); for(int i=0; i 1 1 9 1 1 1 3. 이제 queue의 제일 첫번째 인덱스를 나머지 인덱스랑 비교하는데 더 큰 인덱스가 있으면 pop하고 그 숫자를 다시 queue의 가장 뒤에 push한다. 그 다음 큐의 상태를 보자. alpha -> 1 2 3 4 5 0 queue -> 1 9 1 1 1 1 4. 3의 과정을 한..
[11403] 경로 찾기 https://www.acmicpc.net/problem/11403그래프에서 i 에서 j로 가는 경로가 있는지 없는지 구하는 문제이기 때문에 BFS, DFS로 해결할 수 있다.1. 가중치 없는 방향 그래프이기 때문에 인접리스트 list 에 해당하는 정점에 연결되어 있는 정점을 넣는다. 2번째 예제를 예시로 들어보면 다음과같이 list에 정점들이 저장되어 있다.list[1] -> 4list[2] -> 7list[4] -> 5, 6list[5] -> 1list[6] -> 7list[7] -> 32. 이제 처음부터 BFS를 하는데 i에서 j로 가는 경로가 있으면 1을 출력하고 아니면 0을 출력하기 때문에 나는 boolean 리턴값을 가진 BFS(i, j)로 코드를 구성하였다. 그래서 i에서..
[2468] 안전 영역 나눠진 영역의 개수를 구하는 것이기 때문에 DFS, BFS 를 이용해서 해결 하는 문제이다. 1. 주어진 예제에서 최소값과 최대값을 입력을 받으면서 구한다. 위의 경우 최소값은 2, 최대값은 8이다.2. 최소값 2부터 최대값 8까지 반복문을 수행하면서 DFS 를 수행하며 안전한 영역의 개수를 구한다.3. DFS를 하고 cnt 변수를 사용하여 영역의 개수를 계속 비교하여 최대 영역의 개수를 cntMax에 저장하여 출력한다.4. 여기서 실수할 수 있는 점은 장마철에 비가 오지 않는 경우도 있기 때문에 cntMax를 1로 초기화 해야한다는 점이다.
[10026] 적록색약 같은 색으로 이루어져 있는 구역을 구하는 문제이기 때문에 DFS, BFS 로 해결할 수 있다. 나는 BFS 를 연습하고 있었기 때문에 BFS를 이용해서 문제를 풀었다. 문자로 입력을 받게 되면 2차원 char 배열을 사용하여야 하고, 계산할때 복잡해 질 것같아서 R 은 숫자 1 / G 는숫자 2 / B 는 숫자 3 으로 받아 정수 2차원 배열을 구성했다. ① 처음에는 적록색약이 아닌 사람이 봤을 때 구역의 수를 구하기 때문에 2차원 배열의 처음부터 끝까지 BFS를 수행해서 영역을 구한다.② 그리고 적록색약인 사람이 봤을 때 구역의 수를 구할 때에는 visited 배열을 초기화하고, R이 나타내는 1과 G가 나타나는 2가 같기 때문에 다시 배열을 처음부터 끝까지 보면서 숫자 2를 1로..