728x90
📌 체육복
체육복을 도난당한 학생에게 여벌의 체육복을 갖고있는 학생이 빌려주는 문제이다.
n = 전체 학생, reserve = 여벌의 체육복이 있는 학생, lost = 체육복을 잃어버린 학생
💡 나의 풀이
문제에서는 각각의 학생을 key - value
의 형태를 띄고있는 dictionary
가 아닌, 리스트로 주어졌다.
전체 학생의 수가 5이면 n = [1, 2, 3, 4, 5]
또, 체육복을 빌려줄때는 바로 앞번호의 학생이나 뒷번호의 학생에게만 빌려 줄 수 있다고 했다. 그래서 index
별로 값을 비교해서 나올수 있는 경우의 수를 분류했다.
여벌의 체육복을 빌려주는 경우의 수는 크게 2가지가 있다.
lost
가reserve
에 포함되지 않는 경우
reserve[i] == lost[j]+1
이면 여벌의 체육복을 빌려 줄 수 있다.reserve[i] == lost[j]-1
이면 여벌의 체육복을 빌려 줄 수 있다.lost
에reserve
가 포함되는 경우
- 이때는 여벌 체육복을 가져온 학생이 체육복을 도난당했으므로, 다른 학생에게 체육복을 빌려 줄 수 없다. 따라서, reserve의 값은 사용할 수 없다.
마지막에는
- 전체 학생에서 잃어버린 학생을 빼주고(
rest
) - 여벌의 체육복을 빌려준
reserve
는 잃어버린 학생(lost
)의 값을 가지고 있으므로 (borrow
) rest
와borrow
의 합집합을 구하면 체육복을 가지고 있는 학생의 최댓값을 구할 수 있다.
코드는 다음과 같다.
def solution(n, lost, reserve):
n = [i for i in range(1, n+1)]
for i in range(len(reserve)):
for j in range(len(lost)):
if lost[j] in reserve: # 여벌의 체육복을 가져온 학생이 도난당한 경우
continue
elif reserve[i] == lost[j] + 1 or reserve[i] == lost[j] - 1: # 여벌의 체육복을 빌려 줄 수 있는 경우
reserve[i] = lost[j]
rest = set(n) - set(lost)
borrow = set(lost) & set(reserve)
return len(rest | result)
반응형
'Algorithm > 프로그래머스(Programmers)' 카테고리의 다른 글
[ 파이썬(python) ] 프로그래머스 level1 - 정수 내림차순으로 배치하기 (0) | 2021.03.31 |
---|---|
[ 파이썬(python) ] 프로그래머스 level1 - 수박수박수 (0) | 2021.03.31 |
[ 파이썬(python) ] 프로그래머스 level1 - 약수의 합 (0) | 2021.03.31 |
[ 파이썬(python) ] 프로그래머스 level1 - 2016년 (0) | 2021.03.31 |
[ 파이썬(python) ] 프로그래머스 level1 - 제일 작은 수 제거하기 (0) | 2021.03.31 |
댓글