https://school.programmers.co.kr/learn/courses/30/lessons/42748
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
주어진 리스트 array에서 특정 구간을 자르고 → 정렬하고 → k번째 값을 찾는 문제입니다.
- 배열에서 i번째부터 j번째까지 자르기
- 정렬하기
- k번째 값 찾기
예를 들어, array = [1, 5, 2, 6, 3, 7, 4]이고 commands = [[2, 5, 3], [4, 4, 1], [1, 7, 3]]라면:
첫 번째 명령어 [2, 5, 3]을 처리하는 과정을 보면,
- array의 2번째부터 5번째까지 가져오면 [5, 2, 6, 3]
- 이를 정렬하면 [2, 3, 5, 6]
- 여기서 3번째 값은 5
이런 방식으로 각 commands를 처리한 결과를 리스트로 반환하는 문제입니다.
def solution(array, commands):
answer = []
for command in commands:
i, j, k = command
sliced_array = sorted(array[i-1:j]) # 리스트 자르고 정렬
answer.append(sliced_array[k-1]) # k번째 값 추가
return answer
📌 코드해석
def solution(array, commands):
answer = []
for command in commands:
i, j, k = command
1. solution 함수는 두 개의 인자를 받습니다: array(숫자리스트), commands(여러개의 i,j,k를 담는 리스트)
- commands의 각 원소는 [i, j, k] 형태이며, 슬라이싱 범위(i~j)와 k번째 값을 의미합니다.
2. 최종 결과를 저장할 빈 리스트 answer를 생성합니다.
3. commands 리스트를 하나씩 순회하며 [i, j, k]를 가져옵니다.
- command는 [i, j, k] 형태의 리스트이며, 이를 변수 i, j, k에 할당합니다.
1회차: i=2, j=5, k=3 (command = [2, 5, 3])
2회차: i=4, j=4, k=1 (command = [4, 4, 1])
3회차: i=1, j=7, k=3 (command = [1, 7, 3])
sliced = sorted(array[i-1:j])
answer.append(sliced[k-1])
return answer
4. array[i-1:j] : 리스트 슬라이싱을 사용하여 i번째부터 j번째까지의 요소를 추출합니다.
- Python의 인덱스는 0부터 시작하므로, i-1을 사용합니다.
5. sorted(...) : 슬라이싱한 리스트를 정렬합니다.
- 예제에서 [5, 2, 6, 3] → [2, 3, 5, 6]
6. 정렬된 리스트에서 k번째 값을 찾고, 이 값을 answer 리스트에 추가합니다.
7. 모든 commands를 처리한 후 최종 결과 answer를 반환합니다.
📌 코드 요약
✔ commands 리스트를 하나씩 반복하며 [i, j, k] 값을 가져옴
✔ array에서 i~j 범위를 슬라이싱
✔ 정렬 후 k번째 값을 answer 리스트에 추가
✔ answer를 반환
📌 사용된 주요 함수
✅ 리스트 슬라이싱 (array[i-1:j])
- 리스트의 일부를 가져올 때 사용됩니다.
- i번째 ~ j번째를 가져오려면 Python은 0부터 시작하는 인덱스 시스템이므로, i-1을 사용해야 합니다.
arr = [10, 20, 30, 40, 50]
print(arr[1:4]) # [20, 30, 40] (index 1 ~ 3까지 포함)
✅ sorted() 함수
- 리스트를 정렬할 때 사용됩니다.
- 새로운 정렬된 리스트를 반환하며, 원본 리스트는 변경되지 않습니다.
arr = [3, 1, 4, 1, 5]
sorted_arr = sorted(arr) # [1, 1, 3, 4, 5]
✅ list.append(value)
- 리스트에 새로운 값을 추가할 때 사용됩니다.
numbers = [1, 2, 3]
numbers.append(4)
print(numbers) # [1, 2, 3, 4]
✅ 리스트 인덱싱 (list[index])
- 리스트의 특정 위치 값을 가져오는 방법입니다.
- Python의 인덱스는 0부터 시작하므로 k번째 요소는 k-1 인덱스로 접근합니다.
arr = [10, 20, 30, 40, 50]
print(arr[2]) # 3번째 요소 (30)
'PYTHON' 카테고리의 다른 글
| [python/프로그래머스 LV1] 과일 장수 (0) | 2025.02.24 |
|---|