오랑우탄의 반란

프로그래머스 | K번째수 (Python3) 본문

PYTHON/프로그래머스

프로그래머스 | K번째수 (Python3)

5&2 2024. 7. 12. 15:01
반응형

 

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

 

K번째수

 

풀이 과정

commands 리스트의 a에 대해서  i, j 를 각각 인덱스로 출력해 num 에 넣어줍니다. 

그리고 num 안의 b 에 대해 정렬을 해준 후 k 에 해당하는 값을 answer 에 넣어줍니다.

처음에는 append 안에 pop을 썼는데 자꾸 인덱스 범위가 벗어났다는 오류가 떠서 막혔다가 생각해보니 굳이 pop을 안하고 인덱스로 리스트값을 반환하면 되는 거여서 그렇게 작성했습니다. 

def solution(array, commands):
    answer = []
    num = []
    for a in commands:
        num.append(array[a[0]-1:a[1]])
        for b in num:
            b.sort()
            answer.append(b[a[2]-1])
    return answer

 

그런데 계속 오류가 떠서 왜 그런가 해서 봤더니 두번째 for 문의 마지막 anwer.append 부분의 인덴트가 잘못 되었던 것입니다! for b in num 이라는 조건문 안으로 들어가서 각 리스트에 대한 인덱스 범위가 달라 인덱스 범위를 벗어났다는 오류가 뜬 것이었습니다. (아마 pop 도 같은 문제였겠지요?) 

 

최종 코드

 

수정한 코드는 아래와 같습니다. 조건문 사용 시 어디까지 조건 안에 넣을 건지 잘 따져봐야겠습니다. 

def solution(array, commands):
    answer = []
    num = []
    for a in commands:
        num.append(array[a[0]-1:a[1]])
        for b in num:
            b.sort()
        answer.append(b[a[2]-1])
    return answer

 

한줄코딩을 해보자면 위 코드를 이렇게 줄일 수 있습니다. 

sorted를 기억합시다..

def solution(array, commands):
    answer = []
    for a in commands:
        answer.append(sorted(array[a[0]-1:a[1]])[a[2]-1])
    return answer

 

map, lambda 를 사용한 찐한줄코딩 풀이도 있었는데 아직 람다함수 사용이 익숙하지는 않습니다..

def solution(array, commands):
    return list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands))

 

 

 

 

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

 

 

 

프로그래머스

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

programmers.co.kr

 

 

반응형