코딩 테스트/프로그래머스

Lv1. 체육복

  • -
728x90
반응형

문제 보기 :  체육복

 

프로그래머스

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

programmers.co.kr

 


문제

  • 정답률 : 57%

 


작성 코드

def solution(n, lost, reserve):
    more = []
    lost = lost[::-1]; reserve=reserve[::-1]
    reserve, lost = list(set(reserve)-set(lost)), list(set(lost)-set(reserve))
    
    for i in reserve:
        if i in lost:
            lost.remove(i)
        elif i+1 in lost:
            if i-1 in lost:
                more.append(i)
            else:
                lost.remove(i+1)
        elif i-1 in lost:
            lost.remove(i-1)
            
    for i in more:
        if i-1 in lost:
            lost.remove(i-1)
        elif i+1 in lost:
            lost.remove(i+1)
            
    answer = n - (len(lost))
    return answer

풀이

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

이 부분 때문에 오래 걸렸다.
lost=[2,3], reserve = [3,4]일 때 3은 자기가 가진 여유분 옷을 입기 때문에 무조건 제거하고 시작해야된다는 건데, 
내가 보기에는 4번이 3번한테 옷 빌려주고, 3번이 2번한테 옷을 빌려주면 5명 모두 수업할 수 있다고 해석을 했기 때문이지..

근데 제한 사항에서 저렇게 줘서 좀 헷갈리는 부분이 있었다.

그리고 처음에 같은 수를 제거하는 코드를 짤 때

reserve = list(set(reserve)-set(lost))
lost = list(set(lost)-set(reserve))
return reserve, lost

이렇게 짰는데, 이렇게 하면 reserve가 업데이트된 상태로 lost에 적용되어 오류가 발생했다 (으휴)

그래서 이 부분을 한 줄로 변경한 뒤에 풀이했더니 문제 없이 작동했다.

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv2. 2 x n 타일링  (0) 2024.09.22
Lv2. 가장 큰 수  (0) 2024.09.21
Lv3. 최고의 집합  (0) 2024.09.14
Lv1. 완주하지 못한 선수  (0) 2024.09.13
Lv1. 대충 만든 자판  (0) 2024.09.13
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.