https://www.acmicpc.net/problem/5597
-- 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.
-- 교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.
바로 생각나는 풀이 방법은,
1. 1부터 30번 까지의 출석번호 리스트 생성
2. 입력 받은 28줄의 제출자 명단 리스트로 변형
3. 1부터 30 까지의 리스트 - 제출자 명단 리스트 = 미제출자 번호 출력
attendance_list = list(range(1, 31))
submitted_list = []
for _ in range(28):
submitted_list.append(int(input()))
#정처기에도 나옴 list.append -> list 내 새로운 값 추가
absentees = list((attendance_list) - (submitted_list))
absentees.sort()
print('\n'.join(map(str, absentees)))
로 먼저 구현을 시도해봤는데, 오류가 떴다,,, 구글링 해봤더니 "-"연산은 리스트 사이의 차집합을 계산하는데 사용 불가능 했음,
그래서 Set을 사용해야 한다는 것을 발견함
List
Set
때문에, attendance_list와 submitted_list를 set으로 변형 시킨 후, 차집합을 계산한 후 List로 변경한다.
attendance_list = list(range(1, 31))
submitted_list = []
for _ in range(28):
submitted_list.append(int(input()))
absentees = list(set(attendance_list) - set(submitted_list))
absentees.sort()
print('\n'.join(map(str, absentees)))
으로 정답,,!
추가적으로 새로 알게된 것,,
줄 띄어서 출력하기를 \n 사용 밖에 몰라서 또 문자열 전환하고, 맵 함수 씌우고, join으로 바꿔서 사용했으나 List 같은 경우에는for absentee in absentees: print(absentee)
처럼 임시 변수 값을 지정해서 반복문 내 블록을 실행하면 쉽게 띄어쓰기가 가능했음.