오랑우탄의 반란
프로그래머스 | K번째수 (Python3) 본문
반응형
오늘도 오랑이는 문제를 풉니다.
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))
오랑우탄이 영어를 하고 오랑이가 코드마스터가 되는 그날까지~
반응형
'PYTHON > 프로그래머스' 카테고리의 다른 글
프로그래머스 | 문자열 내 마음대로 정렬하기 (Python3) SORT 함수 (0) | 2024.07.12 |
---|---|
프로그래머스 | 두 개 뽑아서 더하기 (Python3) SET함수 (0) | 2024.07.12 |
프로그래머스 | 숫자 문자열과 영단어 (Python3) 리스트, 딕셔너리 (0) | 2024.07.12 |
프로그래머스 | 시저 암호 (Python3) 리스트, ORD, CHR (2) | 2024.07.11 |
프로그래머스 | 최소직사각형 (Python3) (0) | 2024.07.11 |