n
: 출석한 학생 번호 (1 ≤ n
≤ 30)
✅ 입력 조건
1.28
번 반복해 제출자의 출석 번호 입력
✅ 출력 조건
1. 출석하지 않은 출석 번호를 오름차순으로 한 줄씩 출력
1부터 30까지 전체 학생 출석 번호를 담은 리스트를 만든다.
28번 반복해 출석 번호를 입력받아 리스트에 저장한다.
전체 출석 번호와 입력 받은 출석 번호를 for문을 돌면서 비교하고,
없는 번호를 새로운 리스트에 넣는다.
전체 출석 번호는 이미 오름차순이므로 없는 번호도 오름차순으로 저장된다.
없는 번호 리스트를 한 줄씩 출력하도록 구현한다.
리스트 생성 →
for 문 →
출력 →
최종 시간복잡도
으로 제한 시간 내에 연산이 가능하다.
for문으로 해당 출석 번호가 제출자의 출석 번호에 있는지 확인하기
# 전체 번호
whole = [int(i) for i in range(1, 31)]
# 출석번호 입력
attend = [int(input()) for _ in range(28)]
# 결석 저장 리스트
absent = []
# 출석 확인
for w in whole:
if w not in attend:
absent.append(w)
# 원하는 형식으로 출력
for a in absent:
print(a)
# 전체 번호
whole = set(range(1, 31))
# 출석번호 입력
attend = set(int(input()) for _ in range(28))
# 결석 저장 리스트
absent = whole - attend
# 오름차순 정렬
absent = sorted(absent)
# 출석 확인
for a in absent:
print(a)
set()
를 통해 집합으로 만들어 사용한 풀이이다. for문 없이 -
로 차집합을 구해서 바로 원하는 정답을 얻을 수 있었다.set
를 통해 더 깔끔하게 코드를 작성할 수 있다는 것을 알게 되었다.N
명이었다면, 전체 시간 복잡도는 으로 동일했겠지만 원하는 결석자를 찾는 연산의 시간 복잡도가 다음과 같기 때문에 집합을 이용하는 것이 더 효율적일 것 같다.