본문 바로가기
코딩 테스트/Python_백준

[백준/Python] 5597번 과제 안 내신 분..? 문제

by 모두의 케빈 2023. 3. 20.

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

출처: 백준 5597번 과제 안 내신 분..? 문제

 

■ 코드 풀이

 

아이디어는 다음과 같습니다.

1) 길이가 30인 출석부 list에 모든 값을 0으로 초기화 합니다.

2) 입력 받은 값(과제 제출한 학생의 출석부 번호)을 각각의 출석부 list에 업데이트 합니다. 이 때, list의 index 값에 접근하기 위해 -1을 빼줍니다.

3) 이제 출석부 list에는 과제를 제출하지 않은 학생의 번호에만 0 값이 남아 있습니다. 그 index 값을 리스트의 index 메서드로 찾아줍니다. 같은 index를 return하지 않도록 찾은 학생의 번호에는 -1을 넣어줍니다.

import sys

students = [0 for i in range(30)]

for i in range(28):
    student_idx = int(sys.stdin.readline())
    students[student_idx-1] = student_idx
    
for i in range(2):
    idx = students.index(0)
    print(idx+1)
    students[idx] = -1

 

그런데, 찾아보니 아래와 같은 풀이법도 있었습니다. 위에 제가 짠 코드와 비교하면 코드가 아름다울 정도로 간단합니다. 백준 사이트에 제출해보면 시간은 제 코드보다 다소 오래 걸리지만, 아래의 방법이 조금 더 '파이썬스러운'  코드인 것 같습니다. 오늘도 또 하나 배워가네요.

참고로 파이썬에서 students 앞에 붙어있는 *는 unpacking 역할을 합니다.  print(*students, sep = '\n')는 students라는 list의 값을 개별 원소 값으로 하나 하나 씩 찢은 다음에, 이를 줄 바꿈('\n')으로 구분하라는 뜻입니다.

students = [i for i in range(1,31)]
for _ in range(28):
    s.remove(int(input()))
print(*students,sep="\n")

댓글