[Python] 프로그래머스 - Level1 - 체육복

강주형·2022년 8월 10일
0

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

탐욕법(Greedy)

def solution(n, lost, reserve):
    for r in reserve:
        if r in lost:
            lost.remove(r)
        else:
            if r-1 in lost:
                lost.remove(r-1)
                continue
            elif r+1 in lost:
                lost.remove(r+1)
    return n - len(lost)

처음에 이런식으로 했는데, 몇 가지 케이스에서 오류 발생
아무리 생각해도 어디가 문제인지 파악을 못했는데
lost와 reserve에 중복되는 원소가 있을 때의 처리가 완벽하지 않은 것 같았음

따라서, 아래처럼 set 끼리 연산으로 교집합을 제거하고 새로 list를 만듦

def solution(n, lost, reserve):
    diff_lost = list(set(lost) - set(reserve))
    diff_reserve = list(set(reserve) - set(lost))
    for r in diff_reserve:
        if r-1 in diff_lost:
            diff_lost.remove(r-1)
            continue
        elif r+1 in diff_lost:
            diff_lost.remove(r+1)
    return n - len(diff_lost)

오류를 빨리 발견하지 못해서 시간이 너무 오래 걸림..


  1. 집합(set)끼리는 +/- 연산이 가능!
profile
Statistics & Data Science

0개의 댓글