문제
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
풀이
제한사항 중 '여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다.' 에서 lost 배열과 reserve 배열을 정제해 줄 필요가 있다고 생각했습니다. 그래서 reserve 배열에 있는 학생 번호가 lost 배열에 있는 경우, 해당 학생 번호를 lost 배열과 reserve 배열에서 제외하는 방식으로 new_lost 와 new_reserve 를 재정의 해줬습니다.
체육복을 빌리는 과정은 그리디를 사용하여 풀이했는데, new_lost 와 new_reserve 가 오름차순으로 정렬되어 있고, '본인보다 작은 번호에서 해결 ▶️ 큰 번호에서 해결'과 같은 현재 상황에서 선택할 수 있는 가장 최선의 선택지가 있기 때문이었습니다.
💡 풀이 코드는 아래와 같습니다.
def solution(n, lost, reserve):
new_lost = sorted([i for i in lost if i not in reserve])
new_reserve = sorted([i for i in reserve if i not in lost])
# 문제가 해결된 학생 카운트
lost_to_reserved = 0
for target in new_lost:
# 오름차순 정리이므로, 자신보다 작은 번호 먼저 확인
if (target - 1) in new_reserve:
new_reserve.remove(target - 1)
lost_to_reserved += 1
elif (target + 1) in new_reserve:
new_reserve.remove(target + 1)
lost_to_reserved += 1
answer = n - len(new_lost) + lost_to_reserved
return answer
'Algorithm' 카테고리의 다른 글
| [프로그래머스] 성격 유형 검사하기 (KAKAO TECH INTERNSHIP) - Python (0) | 2023.02.23 |
|---|---|
| [프로그래머스] 실패율 (KAKAO BLIND RECRUITMENT) - Python (0) | 2023.02.23 |
| [프로그래머스] 다트 게임 (KAKAO BLIND RECRUITMENT) - Python (0) | 2023.02.22 |
| [BOJ] 폴리오미노 - Python (0) | 2022.12.04 |
| [프로그래머스] 구명보트 - Python (0) | 2022.12.04 |