그리디 알고리즘 - 프로그래머스

SEUNGJUN·2022년 3월 8일
0

1. 체육복

문제 해결

def solution(n, lost, reserve):
    only_lost = set(lost) - set(reserve)
    only_reserve = set(reserve) - set(lost)
    # 옷이 여벌로 있는사람과 옷을 도난당한 사람의 중복을 제거
    cnt = 0
    for i in only_lost:
        cnt_true = True
        # 옷을 빌렸는지 체크하기 위해서 cnt_true를 True로 잡아준다
        for j in only_reserve:
            # 옷을 도난당한사람에 앞번호 뒷번호를 사람이 옷을 여벌로 가지고 있으면
            # cnt_true를 False로 바꿔준다
            if i-1 == j or i+1 == j:
                cnt_true = False
                # 옷을 빌려줬다면 옷을 빌려준 사람은 set에서 빼준다
                only_reserve.remove(j)
                break
        if cnt_true == True:
            옷을 만약에 빌리지 못했다면 cnt에 1을 더해준다
            cnt += 1
    # 전체 인원에서 옷을 빌리지 못한 사람을 빼준다
    return n - cnt

이 문제의 가장큰 함정은 옷을 여벌로 가지고 있는 사람이 옷을 도난 당할수 있는 상황도 겹친다는 것이기 때문에 set을 이용해서 옷을 가져온사람과 옷을 도난당한사람이 중복되지 않게 정리를 하고 옷을 빌려준 사람은 set에서 빼주어야 정확하게 값을 구할수가 있다.

profile
RECORD DEVELOPER

0개의 댓글