오랑우탄의 반란

프로그래머스 | 명예의 전당 (1) (Python3) 본문

PYTHON/프로그래머스

프로그래머스 | 명예의 전당 (1) (Python3)

5&2 2024. 7. 16. 16:34
반응형

 

오늘도 오랑이는 문제를 풉니다. 

 

명예의 전당 (1)

 

풀이 과정

우선 전당에 올라갈 값들을 따로 저장해둘 빈 리스트 temp 가 필요합니다. 

이때 k 값과 무관하게 모든 score 값 i 는 temp에 저장되는 과정을 거치므로 for 문 안에 바로 넣어줍니다.

문제 문맥상 temp 의 sort를 해야 하나 싶었지만 어차피 추출할 때 min 값으로 추출하면 돼서 굳이 정렬이 필요 없습니다. 

def solution(k, score):
    answer = []
    temp = []
    for i in score:
        temp.append(i)
        #조건
    answer.append(min(temp))
    return answer

 

이제 구체적인 조건에 대해 생각해봅시다.

temp 의 길이가 k 보다 길어질 경우, temp 에서 가장 작은 값을 제거하고 남은 값 중에서 가장 작은 값이 answer 에 들어가는 구조입니다. 

처음에는 이런 식으로 temp와 score 의 최솟값을 비교하는 조건문을 작성했는데 조건문이 많아지고 불필요한 중복이 있습니다.

if len(temp) < k:
    temp.append(i)
else:
    if min(temp) < i:
        temp.remove(min(temp))
        temp.append(i)

 

그렇기 때문에 위에서 작성한 조건에 대해 딱 필요한 부분만 코드로 짜보면 아래와 같습니다.

어차피 조건 실행 후 다시 for 반복문으로 돌아가기 때문에 프로그램이 자동으로 temp 에 숫자를 추가해 다시 len(temp)이 k 보다 커지는 구조가 됩니다. 

if len(temp) > k:
	temp.remove(min(temp))

 

작성한 조건들을 모두 합쳐주면 아래와 같습니다.

 

최종 코드

def solution(k, score):
    answer = []
    temp = []
    for i in score:
        temp.append(i)
        if len(temp) > k:
            temp.remove(min(temp))
        answer.append(min(temp))
    return answer

 

 


오랑우탄이 영어를 하고 오랑이가 코드마스터가 되는 그날까지~

 

 

 

프로그래머스

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

programmers.co.kr

반응형