🚩 문제설명
https://programmers.co.kr/learn/courses/30/lessons/42862
◾ 체육복을 최대한 많이 빌려주는 것이 관건이다.
◾ 여벌의 체육복은 1복만 있다. 2복을 빌려준다고 착각하지말자.
◾ 필자는 처음에 2복을 빌려준다고 생각했음 😎
◾ 또한 주의해야할 점이 여벌의 복을 1복 가져왔는데 만약 도난당한다면 그 학생은 더이상 체육복을 빌려줄 수 없다.
✅ 입출력
n: 전체 학생의 수
lost: 체육복을 도난당한 학생 배열
reserve: 여벌의 체육복을 가져온 학생 배열
return ➡️ 체육 수업을 들을 수 있는 최대 학생의 수
n | lost | reserve | return |
5 | [2, 4] | [1, 3, 5] | 5 |
5 | [2, 4] | [3] | 4 |
3 | [3] | [1] | 2 |
📑 문제 풀이
with 파이썬 (Python)
def solution(n, lost, reserve):
# 여벌옷 X 도난만 당한
lost_ = set(lost) - set(reserve)
# 도난 X 여벌옷 있는 : 다른사람한테 빌려줄 수 있는
reserve_ = set(reserve) - set(lost)
for i in reserve_:
if i - 1 in lost_:
lost_.remove(i - 1)
elif i + 1 in lost_:
lost_.remove(i + 1)
answer = n - len(lost_)
print("답:", answer)
◾ lost_ 배열은 여벌옷이 없이 도난만 당한 학생을 이른다.
- 그렇담 얘네는 빌려주기만을 기다려야 한다.
- 그니까 이 배열의 수를 줄여야만 최대한 많은 학생에게 체육복을 빌려줄 수 있을 것이다.
◾ reserve_ 배열은 도난당하지않고 여벌옷도 있는 학생을 이른다.
- 즉, 얘네가 도난 당한 학생들에게 여벌 옷을 빌려줘야만
- 체육복이 없는 학생 수를 줄일 수 있어 최대한 많은 학생에게 체육복을 빌려줄 수 있을 것이다.
◾ 일단 반복문을 돈다.
◾ 반복문은 도난X 여벌옷O 학생들 배열에서 돈다. (reserve_)
◾ 만약에 reserve_ 요소에서 i - 1 값이 lost_에 있다면
- lost_ 에서 i - 1 값을 제거해준다.
- 즉, 만약에 lost_ = [1, 4] 라고 하고
- reserve_ = [2] 라고 한다면 2 - 1 = 1 이 lost_에 있으니까 1은 체육복을 빌릴 수 있는 상태라서
- lost_에서 지워져도 된다.
- 그니까 지워지는 이 과정은 도난당한 애들이 여벌옷을 빌리는 과정인 것이다.
◾ 마지막에 lost_ 배열의 길이를 n 에서 빼준다.
- 즉, 전체 학생 수 에서 체육복이 없는 애들을 빼주는 것이다.
- 그러면 체육 수업을 들으러 갈 수 있는 학생 수를 구할 수 있게 된다.
728x90
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 프로그래머스' 카테고리의 다른 글
[PG67256] 키패드 누르기 (0) | 2021.11.06 |
---|---|
[PG81301] 숫자 문자열과 영단어 (0) | 2021.11.06 |
[PG60057] 문자열 압축 (0) | 2021.11.06 |
[PG72410] 신규 아이디 추천 (0) | 2021.11.06 |
[PG42748] K번째수 (0) | 2021.11.06 |