더 많이 실패하기

공부 108일차: 백준 5597번 과제 안 내신 분..? 자바 java 본문

알고리즘/백준

공부 108일차: 백준 5597번 과제 안 내신 분..? 자바 java

김발자~ 2022. 11. 15. 21:38
반응형

5597 과제 안 내신 분..?

https://www.acmicpc.net/problem/5597

 

5597번: 과제 안 내신 분..?

X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데,

www.acmicpc.net

 

 

 


백준 단계별로 풀어보기 1차원 배열

5597번 문제 과제 안 내신 분..?


문제


 

 

 

 


과정 생각해보기


 

가장 작은 출석번호가 먼저 출력되야 한다고 했으므로 정렬이 필요한데,

정렬 중 매우 빠른 방법으로 분류되는 카운팅 정렬을 사용하기로 했다

https://gimbalja.tistory.com/72

 

백준 10989번 수 정렬하기 3 자바 / 백준 단계별로 풀어보기 9단계 / 9. 정렬

백준 9단계 3번 문제 - 10989 수 정렬하기 3 https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수

gimbalja.tistory.com

위 링크에서 카운팅 정렬의 원리를 자세하게 적어두었다

 

 

1. 카운팅 정렬을 위해선 인덱스=값이므로 인덱스가 30까지 만들어지는 31크기의 배열을 만든다

2. 28명만 과제를 제출했다고 했으므로 28번 도는 반복문에 값이 들어오면 그 값에 해당하는 인덱스값에 1을 더한다

3. 출석 번호가 불리지 않은, 즉 count[i]가 0인 i값을 차례대로 출력한다

(카운팅 정렬 방법을 사용했기 때문에 오름차순 정렬되어 작은 수부터 출력한다는 문제의 조건을 만족한다)

 

 


정답 인정 코드


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
 
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int[] count = new int[31];    // 카운팅 정렬을 위해 인덱스가'30'까지 들어가야 하므로 31크기의 배열 생성
        
        for(int i = 0; i < 28; i++) {
            count[Integer.parseInt(br.readLine())]++;
        }
        
        //디버깅
//        System.out.println(Arrays.toString(count));
        
        for(int i = 1; i < count.length; i++) {    // 출석번호는 1부터 시작
            if(count[i] == 0) {
                System.out.println(i);
            }
        }
 
    }
 
}
 
cs

 

처음엔 크기가 28인 배열을 만들었었는데, 어차피 30명 중 2명이 내지 않는다고 정해져 있으므로

바로 카운팅 정렬 배열에 넣어서 해결했다

 

 

 


 

반응형
Comments