반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/42862
풀이1
def solution(n, lost, reserve):
set_reserve = set(reserve)-set(lost)
set_lost = set(lost)-set(reserve)
for i in set_reserve:
if i-1 in set_lost:
set_lost.remove(i-1)
elif i+1 in set_lost:
set_lost.remove(i+1)
return n-len(set_lost)
- 잃어버린 학생과 여벌 체육복 보유를 set를 활용해 정리
- 여벌 체육복을 가져온 학생이 도난을 당한 경우 어디에도 속하지 않도록 해야한다.
- 이후 하나씩 처리한다음 전체 학생수에서 여전히 lost에 포함되는 학생을 빼서 정답 도출
풀이2
def solution(n, lost, reserve):
nlist = [1 for _ in range(n+1)]
for i in lost:
nlist[i] -= 1
for i in reserve:
nlist[i] += 1
for i in range(1, n+1):
if i-1 > 0 and nlist[i] == 0 and nlist[i-1] == 2:
nlist[i] = 1
nlist[i-1] = 1
elif i+1 < n+1 and nlist[i] == 0 and nlist[i+1] == 2:
nlist[i] = 1
nlist[i+1] = 1
return sum(nlist[1:]) - nlist.count(2)
- 모든 경우를 배열로 저장하는 풀이
- 위 풀이보다 속도가 느리지만 통과
- 직관적이지 못한 코드이므로 풀이1을 통해 해결하는 것이 더 바람직.
반응형
'💻 CS > 알고리즘 연습' 카테고리의 다른 글
[알고리즘 연습] 124나라의 숫자 (프로그래머스 lv2, 파이썬) (0) | 2021.06.09 |
---|---|
[알고리즘 연습] 실패율 (프로그래머스 lv1, 파이썬) (0) | 2021.06.08 |
[알고리즘 연습] 쇠막대기 (백준 10799, 파이썬) (1) | 2021.05.07 |
[알고리즘 연습] AC (백준 5430, C++) (0) | 2021.04.19 |
[알고리즘 연습] 옥상 정원 꾸미기 (백준 6198, C++) (0) | 2021.04.10 |