πŸ“ algorithm

[λ°±μ€€] 13300 λ°©λ°°μ • JAVA 풀이 (μ‚Όμ„± sw μ—­λŸ‰ν…ŒμŠ€νŠΈ IM λŒ€λΉ„ - 1)

c0zi 2024. 1. 18. 14:48
문제 

 

정보 μ΄ˆλ“±ν•™κ΅μ—μ„œλŠ” λ‹¨μ²΄λ‘œ 2λ°• 3일 μˆ˜ν•™μ—¬ν–‰μ„ κ°€κΈ°λ‘œ ν–ˆλ‹€. μ—¬λŸ¬ 학년이 같은 μž₯μ†Œλ‘œ μˆ˜ν•™μ—¬ν–‰μ„ κ°€λ €κ³  ν•˜λŠ”λ° 1ν•™λ…„λΆ€ν„° 6ν•™λ…„κΉŒμ§€ 학생듀이 묡을 방을 λ°°μ •ν•΄μ•Ό ν•œλ‹€. 남학생은 남학생끼리, 여학생은 여학생끼리 방을 λ°°μ •ν•΄μ•Ό ν•œλ‹€. λ˜ν•œ ν•œ λ°©μ—λŠ” 같은 ν•™λ…„μ˜ 학생듀을 λ°°μ •ν•΄μ•Ό ν•œλ‹€. λ¬Όλ‘  ν•œ 방에 ν•œ λͺ…λ§Œ λ°°μ •ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

ν•œ 방에 λ°°μ •ν•  수 μžˆλŠ” μ΅œλŒ€ 인원 수 Kκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 쑰건에 맞게 λͺ¨λ“  학생을 λ°°μ •ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 방의 μ΅œμ†Œ 개수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

예λ₯Ό λ“€μ–΄, μˆ˜ν•™μ—¬ν–‰μ„ κ°€λŠ” 학생이 λ‹€μŒκ³Ό κ°™κ³  K = 2일 λ•Œ 12개의 방이 ν•„μš”ν•˜λ‹€. μ™œλƒν•˜λ©΄ 3ν•™λ…„ 남학생을 λ°°μ •ν•˜κΈ° μœ„ν•΄ λ°© 두 κ°œκ°€ ν•„μš”ν•˜κ³  4ν•™λ…„ μ—¬ν•™μƒμ—λŠ” 방을 λ°°μ •ν•˜μ§€ μ•Šμ•„λ„ 되기 λ•Œλ¬Έμ΄λ‹€.

 

μž…λ ₯

 

ν‘œμ€€ μž…λ ₯으둜 λ‹€μŒ 정보가 μ£Όμ–΄μ§„λ‹€. 첫 번째 μ€„μ—λŠ” μˆ˜ν•™μ—¬ν–‰μ— μ°Έκ°€ν•˜λŠ” 학생 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ N(1 ≤ N ≤ 1,000)κ³Ό ν•œ 방에 λ°°μ •ν•  수 μžˆλŠ” μ΅œλŒ€ 인원 수 K(1 < K ≤ 1,000)κ°€ 곡백으둜 λΆ„λ¦¬λ˜μ–΄ μ£Όμ–΄μ§„λ‹€. λ‹€μŒ N 개의 각 μ€„μ—λŠ” ν•™μƒμ˜ 성별 S와 ν•™λ…„ Y(1 ≤ Y ≤ 6)κ°€ 곡백으둜 λΆ„λ¦¬λ˜μ–΄ μ£Όμ–΄μ§„λ‹€. 성별 SλŠ” 0, 1쀑 ν•˜λ‚˜λ‘œμ„œ 여학생인 κ²½μš°μ— 0, 남학생인 κ²½μš°μ— 1둜 λ‚˜νƒ€λ‚Έλ‹€. 

 

좜λ ₯

 

ν‘œμ€€ 좜λ ₯으둜 학생듀을 λͺ¨λ‘ λ°°μ •ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ 방의 수λ₯Ό 좜λ ₯ν•œλ‹€.

 

예제 μž…μΆœλ ₯

 

πŸ“‹ 풀이

import java.io.*;
import java.util.StringTokenizer;

class Main {
    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[][] student = new int[2][7];
        int room = 0;

        for (int i = 1; i <= N; i++) {
            st = new StringTokenizer(br.readLine());
            int gender = Integer.parseInt(st.nextToken());
            int grade = Integer.parseInt(st.nextToken());

            student[gender][grade]++;
        }

        for (int j = 0; j < 2; j++) {
            for(int l = 1; l < 7; l++) {
                if (student[j][l] > 0) {
                    if (student[j][l] % M == 0) {
                        room += (student[j][l] / M);
                    } else {
                        room += (student[j][l] / M) + 1;
                    }
                }
            }
        }

        System.out.print(room);
    }
}
  • int 2차원 배열을 μ‚¬μš©
  • 성별, 학년에 ν•΄λ‹Ήν•˜λŠ” λ°°μ—΄μ˜ 숫자λ₯Ό 올리고 for문을 톡해 M으둜 λ‚˜λˆˆ 숫자만큼 더함
    • 이 뢀뢄에 λŒ€ν•΄μ„œ μ›μ†Œκ°€ M으둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§ˆ λ•Œ + 1을 ν•œλ§ŒνΌ λ”ν•˜λ©΄ μ•ˆλ˜κΈ° λ•Œλ¬Έμ— λ‚˜λˆ„μ–΄μ„œ μ²˜λ¦¬ν–ˆλŠ”λ°, 더 κΉ”λ”ν•œ ν•΄κ²°λ°©μ•ˆμ„ μ°Ύκ³ μžν•¨
    • ν•΄κ²° λ°©μ•ˆ 1) μ‚Όν•­ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄ if elseλ₯Ό μ‚¬μš©ν•˜μ§€ x
    if (student[j][l] > 0) {
        room += student[j][l] % M == 0 ? student[j][l] / M : student[j][l] / M + 1;
    }
    
    • ν•΄κ²° λ°©μ•ˆ 2) Math의 μ˜¬λ¦Όν•¨μˆ˜μ™€ double μ‹€μˆ˜ν˜•μ„ μ‚¬μš©ν•΄ 처리 → 이게 더 λ‚«λ‹€ ~ πŸ™†πŸ»‍♀️
    if (student[j][l] > 0) {
    	Math.ceil((double) student[j][l] / M);
    }

βœ” μˆ˜μ • ν›„ μ΅œμ’…

import java.io.*;
import java.util.StringTokenizer;

class Main {
    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[][] student = new int[2][7];
        int room = 0;

        for (int i = 1; i <= N; i++) {
            st = new StringTokenizer(br.readLine());
            int gender = Integer.parseInt(st.nextToken());
            int grade = Integer.parseInt(st.nextToken());

            student[gender][grade]++;
        }

        for (int j = 0; j < 2; j++) {
            for(int l = 1; l < 7; l++) {
                if (student[j][l] > 0) {
                    Math.ceil((double) student[j][l] / M);
                }
            }
        }

        System.out.print(room);
    }
}