과제 안 내신 분...?
문제는 다음과 같습니다.
반에는 총 30명의 학생이 있습니다. 과제를 제출할 때 본인의 번호를 말하고 제출하는 것 입니다.
28개의 input은 과제를 한 학생으로 하고 나머지 학생은 과제를 하지 않은 학생으로 생각하면 이해하기 좋습니다.
그렇다면 과제를 하지 않은 나머지 두명은 어떻게 찾을까요?
저의 알고리즘은 30개의 빈칸을 만들어 놓습니다. 이후 과제를 제출한 사람만 표시하는 것이죠 하지만 이 때 저는 표시를 remove() 즉 삭제를 할 것 입니다. 사실 30개의 빈칸 종이는 벌점 리스트가 될 것 이고, 결국 마지막에 남은 학생 2명은 결국 과제를 제출하지 않은 학생입니다.
이를 코드로 표현해보겠습니다.
L1 = list()
for i in range(1,31):
L1.append(i)
for _ in range(28):
A = int(input())
if A in L1:
L1.remove(A)
for m in L1:
print(m)
결국 L1에는 과제를 제출한 사람은 계속 소거해나가고 과제를 하지 못 한 사람만 남게 될 것 입니다.
remove()는 리스트의 특정 요소를 삭제할 수 있습니다.
remove()는 이런 문제에 대해서는 매우 적합합니다. 왜냐하면 학생들이 중복될 수 없기 때문입니다.
중복? remove() 와 중복과 무슨 관련이 있을까요. remove()의 한계를 소개하겠습니다.
저는 [1,2,3,4,5,6,7,8,1] 리스트를 만들었습니다. 하지만 오름차순으로 만들고 싶었는데 의도치 않게 1을 실수로 눌러버려서 리스트에 포함시켰습니다. 이 때 현재 예시는 적합하지 않지만 리스트의 길이가 너무 커 직접 수정하는 것보다 remove()로 삭제하려고 합니다. 따라서 다음과 같은 코드를 작성했습니다.
L = [1,2,3,4,5,6,7,8,1]
L.remove(1)
print(L)
예상하실 수도 있지만 1이 전부 삭제 될까요? 맨 앞에 삭제가 될까요. 아니면 둘도 아닌 맨 뒤에 1요소가 사라질 까요
정답은 맨 앞 1이 사라집니다. remove()는 그 값의 첫번째 값만 삭제합니다. 따라서 이러한 함수의 역할을 정확히 알고 적용하셔야 합니다. 이번 백준 문제에서는 remove()를 사용해도 무방했습니다!
'BaekJoon Reivew' 카테고리의 다른 글
단계별로 풀어보기 백준_3052번 (0) | 2025.03.21 |
---|---|
단계별로 풀어보기 백준_10813번 (0) | 2025.03.20 |
단계별로 풀어보기 백준_10810번 (0) | 2025.03.19 |
단계별로 풀어보기 백준_2562번 (0) | 2025.03.18 |
단계별로 풀어보기 백준_10818번 (0) | 2025.03.18 |