Notice
Recent Posts
Link
- Today
- Total
hye-log
[프로그래머스]체육복(Python) 본문
0. 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42862
1. 문제 설명
1) 도난 당한 학생에게 여벌 체육복 빌려주기
2) 여벌 체육복은 바로 앞번호나 뒷번호의 학생에게만 빌려줄 수 있음
3) 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있음
2. 입출력
# input
n = 5
lost = [2, 4]
reserve = [1, 3, 5]
# output
return = 5
3. 코드
def solution(n, lost, reserve):
answer = 0
_lost = set(lost) - set(reserve) # 여벌 체육복이 도난 당했을 수 있음
_reserve = set(reserve) - set(lost)
for i in _reserve: # 여벌 체육복을 기준으로
if i-1 in _lost: # i-1 번째가 lost 이면
_lost.remove(i-1) # lost에서 제거
elif i+1 in _lost: # i+1 번째가 lost 이면
_lost.remove(i+1) # lost에서 제거
answer = n - len(_lost) # 전체 학생 중에 lost에 남아 있는 수 제거
return answer
실행 결과
4. 회고
탐욕법 문제 시리즈 중에서 level 1에 속해서 쉬울 줄 알았는데 까다로운 조건이 있었다. 여벌 체육복이 있는 학생이 도난당한 학생에게 무조건 빌려줄 수 있다고 생각했는데, 여벌 체육복을 가져온 학생이 도난당했을 수도 있다는 조건이 있었다. 따라서 set 함수를 이용해서 중복된 값을 제거하여 집합으로 선언해주고, 두 집합을 빼서 공통인 학생을 제거하였다. 다음으로 반복문을 작성할 때 여벌 체육복을 기준으로 할지, 도난 당한 학생을 기준으로 반복문을 돌릴지 고민했다. 도난 당한 학생을 기준으로 반복문을 돌리 경우 여벌 체육복이 없을 때 처리가 어려워, 여벌 체육복을 기준으로 반복문을 작성했다. 여벌 체육복을 기준으로 앞 뒤 학생의 체육복이 도난당했다면 도난 당한 학생 리스트에서 제거하는 방식을 사용했다. 마지막에는 전체 학생 중에서 lost에 남아 있는 학생을 제거하여 학생의 최대값을 구했다.
5. Github
https://github.com/iihye/Algorithm/blob/main/Programmers/gym_uniform.py
728x90
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스]베스트앨범(Python) (0) | 2022.11.09 |
---|---|
[프로그래머스]전화번호 목록(Python) (0) | 2022.11.06 |
[프로그래머스]위장(Python) (0) | 2022.10.26 |
[프로그래머스]행렬의 곱셈(Python) (0) | 2022.10.24 |
[프로그래머스]N개의 최소공배수(Python) (0) | 2022.10.20 |
Comments