Dev/PS

[백준/BOJ] 5597번: 과제 안 내신 분..? (Python) 풀이

KangJerry 2024. 5. 30. 23:51

Baekjoon Online Judge (BOJ) 의 5597번 문제인 '과제 안 내신 분..?' 을 풀어보았다.
 
[문제 정보]
https://www.acmicpc.net/problem/5597


문제 개요:

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

교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.

[ 입력 ]
입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.

[ 출력 ]
출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다.

 

즉, 출석번호는 1~30으로 범위가 고정되있으며, 입력은 28줄 고정(중복 X), 출력은 2줄 고정이다. 1~30까지 입력된 학생명부(배열)에서 입력된 번호들은 제외해주고, 입력 안된 번호만 출력하는 식으로 풀이하면 될 것이다.

 

알고리즘:

  1. 학생명부 역할을 할 배열을 만들어준다. (student 변수를 만들고 빈 배열로 초기화해준다.)
  2. 1~30 범위만큼 반복하는 반복문을 사용하여 빈 student 배열에 1~30까지 번호(값)를 넣어준다.
  3. 입력이 28줄 고정(과제 제출한 학생 수가 28명으로 고정)이기에, 28번 반복하는 반복문을 만들어 값을 입력받고, 입력받은 값은 student 배열에서 제거한다. (입력받은 값은 출석한 학생이라는 뜻이므로 학생명부에서 제외시킨다.)
  4. 반복을 완료했다면 배열에는 2개의 값이 남아있을 것이다. 학생의 출석번호 중 작은 값을 먼저 출력해줘야 하므로, 파이썬의 min()과 max() 내장함수를 사용하여 작은 값부터 출력, 이후 다음 출석번호를 출력한다.

 

코드:

student = []

for i in range(1, 31):
    student.append(i)

for _ in range(0, 28):
    n = int(input())
    student.remove(n)

print(min(student))
print(max(student))

위 풀이에 대한 질문이나 틀린 정보가 있다면 댓글로 말씀해 주시면 감사하겠습니다!
 
 

728x90