bit가 눈 앞에서 왔다갔다

Py) 프로그래머스 42862 본문

Algorithm/Prob

Py) 프로그래머스 42862

헬린인형 2022. 1. 12. 21:53

누가 이걸 레벨1이라고 해놨냐..

쉬고 싶어서 이거 했다가 진 다 빠짐,,

이런 경우의 수 생각하는 부분에 좀 약한 것 같다.

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

 

코딩테스트 연습 - 체육복

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

programmers.co.kr

 

일단 내 코드

def solution(n, lost, reserve):
    answer = set([])
    sum = 0
    tmp = []
    for i in range(1, n+1):
        if i in lost:
            if i in reserve:
                tmp.append(i)   # 일단 넣어두기
        else:
            if i in reserve:
                answer.add(i + 1)
                answer.add(i - 1)
            else:
                answer.add(i)
    for i in tmp:
        if i not in answer:
            answer.add(i)
            continue
        if i-1 not in answer:
            answer.add(i-1)
            continue
        if i+1 not in answer:
            answer.add(i+1)
            continue

    answer.remove(0)
    answer.remove(n+1)

    return len(answer)

여벌을 가진 사람이 도둑질 당할 수도 있다는 부분에서 어려웠다.

도둑질 당한 사람은 빌려주고 다른거 빌려 입는다 / 자기가 입는다 / 빌려주고 안입는다 중 뭐가 이득일까를 생각하는게 힘들었다.

set을 써서 중복이 되지 않도록 리스트로 관리하고 0이나 범위 초과된거를 제해주면 되겠다고 생각했는데 안됐음

이렇게 할 경우, 1번 테스트 케이스에서

lost = {2,4}

reserve = {1,3,5}에서 1번이 2번에게 빌려주고, 3번이 2,4에게 빌려주는데, 이때 빌려주는 수가 줄어들어버림.

이거 때문에 set쓰지 말고 개수를 세는 쪽으로 할까 싶었다가, set을 쓰지 않을때 발생할 일들이 머릿속에서 너무 복잡해서 + 시간을 이미 너무 많이 써서 그냥 답 검색했다.

검색)

def solution(n, lost, reserve):
    reserve_set = set(reserve) - set(lost)
    lost_set = set(lost) - set(reserve)
    for i in reserve_set:       # 순수하게 여벌을 가짐
        if i - 1 in lost_set:   # 2명 빌려주기
            lost_set.remove(i - 1)
        elif i + 1 in lost_set:
            lost_set.remove(i + 1)


    return n - len(lost_set)

정말 간단하게, 여벌을 가진 애 중 도둑질 안당한 애가 빌려주는 경우만 생각한 코드..

걔는 그냥 자기꺼 입는다고 취급하나보다. 그래 넌 너꺼 입어야지.

이런 생각은 어떻게 하는거지..

 

반응형

'Algorithm > Prob' 카테고리의 다른 글

SQL) 프로그래머스 59034  (0) 2022.01.13
Py) 프로그래머스 42747  (0) 2022.01.13
Py) 프로그래머스 42627  (0) 2022.01.12
Py ) 프로그래머스 60057 + 1/16다시풀기  (0) 2022.01.10
Py) 프로그래머스 42584  (0) 2022.01.07
Comments