본문 바로가기

알고리즘 삽질장

[프로그래머스] 체육복

반응형


문제설명

https://programmers.co.kr/learn/courses/30/lessons/42862

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

사고과정

  • 예전에 비슷한 문제를 풀어본 적이 있던 것 같았다.. 그리디 유형이였는데 풀지 못했다.. 내가 놓친 점은 도난당한 사람과 여분의 옷이 있는 사람 모두 동일할 때를 놓쳤다.. 그래서 이 동시 조건을 만족하는 사람을 도난당한 사람이 있는 리스트 lost 와 여분 옷 있는 사람들이 있는 리스트 reserve에서 빼주고 시작해야 한다..
  • 그런 후 여분 리스트 reserve를 하나씩 돌면서 그 reserve의 원소가 왼쪽 -> 오른쪽 순서로 탐색하면서 lost 원소가 있다면 빌려주는 식으로 구현해야 했다..
  • 그리디는 감 잡기가 너무 힘든 것 같다..

풀이(스스로 못 푼 풀이)

def solution(n, lost, reserve):
    # 도난 당한 사람, 여분 있는 사람 둘 다 중복해 있는 사람 제거하고 수행
    set_lost = set(lost) - set(reserve)
    set_reserve = set(reserve) - set(lost)
    
    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)
    answer = n - len(set_lost)
    return answer
반응형