coding test - python/Programmers

Programmers / 체육복 / Python

sillon 2022. 3. 29. 18:39
728x90
반응형

*문제 출처는 프로그래머스에 있습니다.

문제 제목: 체육복

문제 사이트: https://programmers.co.kr/learn/courses/30/lessons/42862


풀이

def solution(n, lost, reserve):
    new_lost = list(set(lost) - set(reserve))
    new_reserve = list(set(reserve) - set(lost))
    lost, reserve = new_lost, new_reserve
    for i in lost:
        if i-1 in reserve:
            reserve.remove(i-1)
        elif i+1 in reserve:
            reserve.remove(i+1)
        else:
            n -= 1
    return n

set함수를 이용하여 중복을 제거하여주었다. 

set함수는 중복을 허용하지 않기 때문에 값들을 필터하는데 쓰이기도 하며 집합을 구할 때 많이 사용된다.
 

(set함수 사용법 : https://justmakeyourself.tistory.com/entry/python-set)

 

모범답안

def solution(n, lost, reserve):
    _reserve = [r for r in reserve if r not in lost]
    _lost = [l for l in lost if l not in reserve]
    for r in _reserve:
        f = r - 1
        b = r + 1
        if f in _lost:
            _lost.remove(f)
        elif b in _lost:
            _lost.remove(b)
    return n - len(_lost)

※ 알아야 할 것

- 중복값제거가 필요하다. 첫번째 풀이에서는 set함수로 reserve와 lost 사이의 중복을 제거해주었다.

- 두번째 풀이에서는 for 문과 if 문을 이용하여 중복값을 제거해주었다.

 

728x90
반응형