촉촉한초코칩

[백준] 5597 (과제 안 내신 분..?) Python 본문

Algorithm

[백준] 5597 (과제 안 내신 분..?) Python

햄친구베이컨 2023. 1. 21. 20:36

문제

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

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

입력

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

출력

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

 

변수 

  • student, task, no_task 리스트 

 

알고리즘

  1. student 리스트에 1부터 30까지 숫자를 넣는다.
  2. 28번 task에 숫자를 입력받는다. 
  3. 다시 for문을 28번 돌려서 task에 student 값이 있는지 확인한다. 
  4. 있으면 넘어가고, 없으면 no_task에 해당하는 student 값을 넣어준다.
  5. 그리고 no_task에 sort 함수를 써서 오름차순으로 정렬시킨 후 출력한다. 
student = []
task = []
no_task = []

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

for i in range (0,28):
    temp = int(input())
    if task.count(temp) == 0:
        task.append(temp)

for i in range(0,28):
    if task.count(student[i]) == 0:
        no_task.append(student[i])
    else:
        continue
    
no_task.sort()
for i in range(len(no_task)):
    print(no_task[i])

왜 안될까..?

 

검색해봤다.

숫자를 입력받은 후 그 값을 student에서 지우고 남은 두개의 값을 출력하는 것 같다. (간단하네..)

student = []

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

for i in range (0,28):
    temp = int(input())
    student.remove(temp)

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

 

안 되면 다른 방법도 다양하게 생각해본 후에 검색하면 될 듯