diff --git a/0421/BOJ/P1003/P1003_kim.java b/0421/BOJ/P1003/P1003_kim.java new file mode 100644 index 0000000..6389729 --- /dev/null +++ b/0421/BOJ/P1003/P1003_kim.java @@ -0,0 +1,25 @@ +package study0421; + +import java.util.Scanner; + +public class baekjoon_P1003_피보나치함수 { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int tc = sc.nextInt(); + for (int tn = 1; tn <= tc; tn++) { + int[][] save = new int[41][2];// N: 최대 40, [0]: 0의 개수 , [1] : 1의 개수 + int num = sc.nextInt(); + save[0][0] = 1; + save[0][1] = 0; + save[1][0] = 0; + save[1][1] = 1; + + for(int i = 2; i <= num; i++) { + save[i][0] = save[i-1][0]+save[i-2][0]; + save[i][1] = save[i-1][1]+save[i-2][1]; + } + System.out.println(save[num][0]+" "+save[num][1]); + } + } + +} diff --git a/0421/BOJ/P1012/P1012_kim.java b/0421/BOJ/P1012/P1012_kim.java new file mode 100644 index 0000000..6e31d7d --- /dev/null +++ b/0421/BOJ/P1012/P1012_kim.java @@ -0,0 +1,46 @@ +package study0421; + +import java.util.Scanner; + +public class baekjoon_1012 { + static int[][] map; + static int m,n; + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int tc = sc.nextInt(); + for(int tn = 1; tn <= tc; tn++) { + m = sc.nextInt(); // 배추밭 가로길이 + n = sc.nextInt(); // 배추밭 세로길이 + int k = sc.nextInt(); // 배추의 개수 + int ans = 0; + map = new int[m][n]; + for(int i = 0; i < k; i++) { + map[sc.nextInt()][sc.nextInt()] = 1; // 배추 위치 표시 + } + for(int i = 0; i < m; i++) { + for(int j = 0; j < n; j++) { + if(map[i][j]==0) continue; + search(i,j); + ans++; + + } + } + System.out.println(ans); + } + + } + static int[] dr= {-1, 1, 0, 0}; // 상하좌우 + static int[] dc = {0, 0, -1, 1}; // 상하좌우 + private static void search(int r, int c) { + map[r][c] = 0; + for(int k = 0; k < 4; k++) { + int nr = r + dr[k]; + int nc = c + dc[k]; + if(nr >=0 && nr < m && nc >= 0 && nc < n && map[nr][nc]==1) { + search(nr,nc); + } + } + + } + +} diff --git a/0421/BOJ/P18111/P18111_kim.java b/0421/BOJ/P18111/P18111_kim.java new file mode 100644 index 0000000..0073123 --- /dev/null +++ b/0421/BOJ/P18111/P18111_kim.java @@ -0,0 +1,54 @@ +package study0421; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.Scanner; +import java.util.StringTokenizer; + +public class baekjoon_18111 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + int n = Integer.parseInt(st.nextToken()); // 가로 + int m = Integer.parseInt(st.nextToken()); // 세로 + int b = Integer.parseInt(st.nextToken()); // 인벤토리 블록 수 + int[][] map = new int[n][m]; + int max = 0; + int min = Integer.MAX_VALUE; + for (int i = 0; i < n; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < m; j++) { + map[i][j] = Integer.parseInt(st.nextToken()); + max = Math.max(map[i][j], max); + min = Math.min(map[i][j], min); + } + } + int anstime = Integer.MAX_VALUE; + int height = 0; + // 땅의 높이가 될 수 있는 범위 + for (int i = min; i <= max; i++) { + int block = b; + int time = 0; + for (int j = 0; j < n; j++) { + for (int k = 0; k < m; k++) { + if (map[j][k] > i) { // 깎아야 함 + block += (map[j][k] - i); // 깎은 블록 인벤토리에 저장 + time += (map[j][k] - i) * 2; // 깎는데 블록 하나당 2초씩 걸림 + } else { + block -= (i - map[j][k]); // 쌓아야 하는 높이만큼 인벤토리에 블록 제거 + time += (i - map[j][k]); // 쌓는데 1초씩 걸림 + } + } + } + //인벤토리에 블록이 0 이상이여야만 평탄화가 잘 진행된 것! && 높이의 최댓값을 구하는 것이라 시간 비교에 등호가 들어간다. + if (block >= 0 && anstime >= time) { + anstime = time; + height = i; + } + } + System.out.println(anstime + " " + height); + } + +}