1) 문제
클릭▼
2) 코드
(개인적으로 좋아하는 다른 사람 코드)

3) 코드 설명
① reserve_only = list(set(reserve) - set(lost)) lost_only = list(set(lost) - set(reserve))
- set() 함수는 집합이란 의미로 중복되지 않은 원소(unique)를 반환한다.

- 문제로 다시 돌아가서 제한사항을 보면 중복되는 번호가 없다고 나와 있기에 set() 함수를 사용하여 중복되는 원소를 제거한다.
- 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
- 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
- reserve와 lost는 중복된 숫자가 없으므로 set(reserve)와 set(lost)를 출력하면 그 숫자 그대로 나온다.

- 그 다음 reserve_only 와 lost_only를 출력해보자.
- reserve와 lost 둘다 중복되는 숫자가 없으므로 set(reserve) - set(lost) = set(reserve) 가 출력되고
set(lost) - set(reserve) = set(lost)가 출력된다.
- list 형식으로 변수에 넣어줬으니 list로 출력된다.

② reserve_only.sort()
- reserve_only를 올림차순으로 정렬한다.
- 예를들어 reserve = [5,1,3] 을 sort() 사용하여 출력 하였다.

- 순서대로 [1, 3, 5]로 출력 되었다.
③ for reserve in reserve_only:
front = reserve - 1
back = reserve + 1
- 현재 reserve_only에는 [1, 3, 5]가 들어있고 여기에서 요소를 하나씩 꺼내 reserve에 넣은 다음 -1을 해서 front에 넣고 +1을 해서 back에 넣는다.
- for문을 돌려서 front와 back을 출력해보자.
- [1, 3, 5] 에 -1씩 하면 front는 0, 2, 4가 나오고 +1씩 하면 back은 2, 4, 6이 나온다.

④ if front in lost_only:
lost_only.remove(front)
elif back in lost_only:
lost_only.remove(back)
- 만약 lost_only에 front의 요소가 들어있으면 lost_only에서 그 요소를 remove 해라.
- 만약 lost_only에 back의 요소가 들어있으면 lost_only에서 그 요소를 remove 해라.
- 현재 lost_only 에는 [2, 4]가 들어있고, front는 0, 2, 4 그리고 back에는 2, 4, 6이 들어있다.
- front에 들어있는 요소 2, 4가 lost_only에 들어있으니 두 요소 다 remove 된다.
- 그럼 lost_only에는 아무 요소도 들어있지 않다.
⑤ return n - len(lost_only)
- n에서 lost_only의 길이 만큼 뺀 결과를 return 해라.
- n = 5 이고, lost_only에는 아무것도 들어있지 않으므로 5 - 0 은 5가 출력된다.
4) 참조
'코딩 연습' 카테고리의 다른 글
[카카오] 1차 비밀지도 (python) (0) | 2022.06.06 |
---|---|
[카카오] 거리두기 확인하기 (python) (0) | 2022.05.23 |
[카카오] 1차 다트 게임 (python) (0) | 2022.05.04 |
[프로그래머스] 내적 (python) (0) | 2022.04.28 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (python) (0) | 2022.04.28 |