LITTLE BY LITTLE

[알고리즘] 정렬 - K번째 수 본문

프로그래머스

[알고리즘] 정렬 - K번째 수

위나 2024. 9. 7. 16:54

https://school.programmers.co.kr/learn/courses/30/lessons/42748

 

프로그래머스

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

programmers.co.kr

 

Q.

  • array가 [1,5,2,6,3,7,4] 이고, 매개변수인 commands가 [i,j,k] = [2, 5, 3]일 때
  • array를 2~5번째까지 자르고, 자른 배열 [5,2,6,3] 을 정렬하고(2,3,5,6), 3번째 수를 return → 5
  • [제한] array의 길이는 1~100, 원소는 1~100, commands의 길이는 1~50 원소의 길이는 3

1. 자르고 → 슬라이싱 활용 list[start:end]

array[i:j]

 

2. 정렬  리스트 정렬 sorted(array) 활용

sorted_array = sorted(array)

 

3. n번째 값 반환  인덱싱 활용 array[n]

sorted_array[k]

 

반복(for)문 사용

: 여러 개(i,j,k)의 형태로 주어지는 commands 처리

for command in commands:
	i,j,k = command

 

유효성 검사

: slicing하기 위해 i<=j 조건 필요 (j가 더 작을 경우 순서 바꿔주기)

if i>j : i,j=j,i

 

리스트 초기화(result=[ ])와 저장공간 할당(result.append())

: commands가 여러 개 들어올 수 있기 때문에 ([i,j,k],[i,j,k]...) 반복적으로 처리하고 연산 결과를 누적해서 저장하기 위함

 

정답

# slicing -> sorted -> indexing 
def solution(array, commands):
    result = []
    for command in commands:
        i,j,k=command
        if i>j:
            i,j = j,i
        sorted_array = sorted(array[i-1:j]) # j-1(x) , 슬라이싱은 끝 범위를 포함하지 않음
        result.append(sorted_array[k-1]) # k(x)
    return result  # return은 for문 밖에

→ 슬라이싱/인덱싱 순서 주의

 

답변 비교

https://school.programmers.co.kr/learn/courses/30/lessons/42748/questions

 

프로그래머스

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

programmers.co.kr

 

Comments