문제: X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.
교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.
입력: 입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.
출력: 출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를출력한다.
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[] Student = new int[31];
for (int i = 1; i <= 28; i++) {
Student[Integer.parseInt(br.readLine())]++;
}
for (int i = 1; i <=30; i++) {
if (Student[i] == 0) {
System.out.println(i);
}
}
}
}
처음 생각한 흐름
1. 변수 (학생수 N = 30) 2. 변수 N을 오름차순으로 정렬 2. for (i를 1부터 N까지) -> 학생수가 30명이기 떄문에 i부터 30까지 반복문을 실행 if (N의 수(학생 번호)가 i에 없으면)( i != N) { 변수에 미제출 학생을 담음 } ->빠진 학생 수 2명을 찾음 3. println을 사용해서 미제출 학생 2명을 출력
reference
1. Student 배열 생성 2. 첫 번째 for문 (1~28까지 돌림) ->28명의 과제 제출한 사람을 br을 사용해 입력받는 반복문 3. 두 번째 for문 (1~30까지 돌림) if (i번 학생의 값이 0이면) { ->1~30까지 돌리는데 i번호 학생이 미제출을 했으면 값이 0임 println(i)를 사용하여 출력 ->미제출 학생의 번호인 i를 출력 }
Integer.parseInt(): 문자열을 숫자로 변환시킴
br.readLine(): 엔터(줄바꿈)"을 기준으로 입력받음