상세 컨텐츠

본문 제목

[coding_test]체육복

coding/coding_test

by golduny_zoo 2021. 5. 11. 16:58

본문

728x90

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

 

코딩테스트 연습 - 체육복

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

programmers.co.kr

설명을 보고 이걸 어떻게 풀어나가야 하지? 라는 생각에 

그리고는 문제에 탐욕법이라고 쓰여 있어

탐욕법에 대해 검색을 해봤더니  greedy Algorithm을 확인 할 수 있었다. 

알고리즘을 보고 나니 어떻게 풀어야 할 지 감이 잡혀 코드를 썼다.

코드에는 문제가 없다고 생각하였으나, 자꾸 return 값에 오류가 생겨

디버깅을 for문 뒤부터 천천히 흝어 나갔는데 

for i in lost 는 

2, 4의 값이 차례대로 나와야 정상이나 2만 출력이 되고, 나머지가 출력이 되지 않아서.. 

멘붕이 왔다. 

코드를 보았으나 문제는 없고, 다시 프린트를 해지만 2만 출력이 되는 이상한 상황?

for문에 리스트 remove함수를 쓸 때 오류가 나올 수 있다는 것을 알게 된 순간이였다. 

다른 변수에 값을 저장 하여 실행하였더니 이번에는 런타임에러가 아주 깔끔하게 나와주었다. 

이 제한사항을 놓치고 있던것 

 

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

 set으로 변수를 차집합을 해주고 다시 코드를 작성하니 다행이 이번에는 통과된 코드가 나올 수 있었다.

def solution(n, lost, reserve):  
    reserve2 = set(reserve)- set(lost)
    lost2 = set(lost) - set(reserve)
    for r in reserve2:
        if r-1 in lost2:
            lost2.remove(r-1)
        elif r+1 in lost2:
            lost2.remove(r+1)
            
    return n - len(lost2)

문제 풀이 후 

- for 문에는 remove와 del을 사용하면 에러가 날 수 있다. 

- greedy Algorithm에 대해 알 수 있었다

2021.05.11 - [분류 전체보기] - [Algorithm] 순간의 최적 선택 greedy 탐욕법

 

[Algorithm] 순간의 최적 선택 greedy 탐욕법

탐욕적 알고리즘(욕심쟁이 알고리즘)이라고도 하며, 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식 내가 돈을 많이 받기 위해 문을 통과해

golduny.tistory.com

- set함수를 이용하여 코드를 작성해 봤다. 

'coding > coding_test' 카테고리의 다른 글

[coding_test]오픈채팅방  (0) 2021.05.13
[coding_test]멀쩡한 사각형  (0) 2021.05.12
[coding_test]모의고사  (0) 2021.05.11
[coding_test] 5/8일 카카오 인턴쉽 코딩테스트  (0) 2021.05.10
[coding_test]내적  (0) 2021.05.10

관련글 더보기