파이썬 알고리즘 195번 | [프로그래머스 체육복]

Yunny.Log ·2022년 7월 6일
0

Algorithm

목록 보기
198/318
post-thumbnail

195. 프로그래머스 체육복

1) 어떤 전략(알고리즘)으로 해결?

  • 제거 해주고 앞 뒤 검사해주는 과정을 거쳤다.

2) 코딩 설명

<내 풀이>


def solution(n, lost, reserve):
    answer = 0

# 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다
# 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없

    new_lost = list(set(lost) - set(reserve))
    new_reserve = list(set(reserve) - set(lost))

    new_reserve.sort()
    new_lost.sort()
    answer+=n-len(new_lost)
    
    print(new_reserve, new_lost)
    for i in range(len(new_reserve))  :

        if new_reserve[i]-1 in new_lost :
            new_lost.remove(new_reserve[i]-1)
            answer+=1
        elif new_reserve[i]+1 in new_lost :
            new_lost.remove(new_reserve[i]+1)
            answer+=1

    return answer

<내 틀렸던 풀이, 문제점>

  • 찍어보니 제대로 remove 가 되지 않고 있던 상황이었음, 왜냐면 인덱스가 밀려서 제대로 검사 수행이 X

def solution(n, lost, reserve):
    answer = 0

# 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다
# 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없
    for j in reserve :
        if j in lost:
                reserve.remove(j)
                lost.remove(j)

    for i in range(len(reserve))  :

            if reserve[i]-1 in lost :
                lost.remove(reserve[i]-1)
                answer+=1
            elif reserve[i]+1 in lost :
                lost.remove(reserve[i]+1)
                answer+=1

    return answer

print(solution(10, [5, 2, 3, 4, 1], [2, 3, 4, 5, 6]))

문제는 이 부분!

    for j in reserve :
        if j in lost:
                reserve.remove(j)
                lost.remove(j)
  • 이 과정에서 제대로 제거가 이뤄지고 있지 않았음

<반성 점>

  • 당연히 확신을 가지지 말고, print 해보고 검사를 하자~

<배운 점>

  • 파이썬 합집합 차집합 만들기에 대해 배움

교집합

set(a)&set(b) => 하면 교집합 나옴

합집합

set(a)|set(b) => 합집합

차집합

set(a)-set(b) => a에서 b의 요소를 뺀 것만 남김

0개의 댓글