Algorithm/프로그래머스

[프로그래머스] 체육복 (Python)

에릭 Kim 2023. 5. 24. 15:41
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

소스코드

 

풀이

★ 먼저 매개변수로 받은 lost와 reserve를 새로 만들어줘야 합니다.

만약 lost  = [1,3,5], reserve = [2,3,7]일 경우 3은 문제 설명의 마지막 조건에 걸리기 때문에 체육복을 빌려줄 수 없습니다.

  • 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.

 

파이썬의 자료구조 중 하나인 set() 집합형은 원소의 중복을 허용하지 않습니다. 그렇기에

n_lost = set(lost) - set(reserve)와 같이 코드를 작성하면 n_lost에는 [1,5]만 들어가게 됩니다. 이런식으로 중복된 번호를 제거해줄 수 있습니다. 

 

★ 위와 같이 중복을 제거한 자료형에서 n_lost의 원소를 반복문으로 돌면서 그 값의 +1 or -1한 값이 n_reserve에 있다면 그 번호는 체육복을 빌려줄 수 있는 번호이기 때문에 n_reserve에서 제거해줍니다. 제거해주지 않으면, 다른 번호의 +1 or -1이 되었을 때 그 번호에게 또 빌려주는 중복 현상이 생길 수 있습니다 ! 

 

★ 만약 반복문에 걸리지 않는다면 체육복을 빌릴 수 없는 번호이기 때문에 n에서 -1을 해줍니다 ! 

 

★ 반복문 안의 과정은 다음과 같습니다

 

반복문의 x가 x-1 먼저 탐색하는지, x+1 먼저 탐색하는 지에 따라 결과 값이 다르게 나옵니다.

lost = 2,4
reserve = 1,3,5일 때

  • x+1을 먼저 확인
    x가 2일 때, 제거할 수 있는 reserve의 원소는 1과 3 둘 중 하나 이고, 3을 제거하게 됩니다.
    x가 4일 때는 제거할 수 있는 경우가 5밖에 남지 않습니다. 그 이유는 x가 2일 때 3을 이미 제거해버렸기 때문입니다.
  • x-1 먼저 확인
    x가 2일 때, 1과 3 중 1을 제거하고, x가 4일 때 3과 5 둘 중 3을 제거할 수 있습니다.

 

즉, x+1을 먼저 확인하게 되면 reserve에서 remove할 수 있는 값의 경우의 수가 줄어들게 되기 때문에 x-1을 먼저 확인해줘야 합니다.
그렇기에 따로 정렬을 해줄 필요는 없습니다.

반응형