[백준] 5597: 과제 안 내신 분..? - python[파이썬]

다인·2024년 7월 22일

백준

목록 보기
13/112
post-thumbnail

그냥 for문으로 푸는 방식을 떠올렸는데, 분명 파이썬에는 좋은 방법이 있을 것 같아서 찾아보았다. remove를 쓰는 방법이 가장 좋은 방법인 것 같았고, 추가로 if not을 쓰는 방법도 있어서 정리해 보았당

참고로 다 예쁘게 정렬되어 있는 리스트이기에 정렬을 하거나 max/min을 굳이 사용할 필요가 없었다.

1. for문

arr = [0] * 30

for i in range(28):
    num = int(input())
    arr[num-1] = 1

for i in range(30):
    if arr[i] == 0:
        print(i+1)

2. remove 👍🏻

arr = [i for i in range(1, 31)]

for i in range(28):
    num = int(input())
    arr.remove(num)

print(arr[0])
print(arr[1])

3. if not

arr = [0] * 30

for i in range(28):
    num = int(input())
    arr.append(num)

for i in range(1, 31):
    if i not in arr:
        print(i)

사실 위 코드는 1번과 별로 다를 것 없다. 여전히 for문을 두 번 쓰는 건데, 출석번호를 받을 때 for문을 길게 쓰는 것보다 더 좋은 방법이 있길래 아래와 같이 다시 작성해 보았다.

arr = [int(input()) for _ in range(28)]

for i in range(1, 31):
    if i not in arr:
        print(i)

비교

아래서부터 1~3번까지 작성한 코드이다.
넷 다 for문을 두 번 쓰는 건 같기에 역시 별 차이는 없다.
코드 길이랑 성능이 상관이 없다는 걸 다시 한번 알게 되었다.
3번의 두 코드의 길이는 확연히 차이나지만 오히려 짧은 게 조금 더 시간이 걸렸기 때문이다.

아무튼 remove라는 메소드를 알아 간 문제였다!

0개의 댓글