<프로그래머스, K번째 수>

Minwoong Kim·2022년 8월 31일
0

2022-Aug-31, today getting of my comfort zone

문제 설명

배열의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구해라. 예를 들어 [1,5,2,6,3,7,4] 배열에 i=2, j=5, k=3 이라면,

1. 2번째부터 5번째까지 자르면 [5,2,6,3]
2. 1에서의 배열을 정렬하면 [2,3,5,6]
3. 2엣의 배열의 3번째 숫자는 5

배열 array, [i,j,k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 해당 연산을 적용했을 때 나온 결과를 배열에 담아 return 하는 solution 함수를 작성해라.

문제를 해결하기 위해, 배열의 특정 범위를 잘라낼 수 있는 slice 메서드와 sort 메서드를 활용해보겠다.

slice method

array.slice(index,number);

splice 메서드는 특정 범위의 원소를 삭제하여 기존 array를 리턴해준다면 slice 메서드는 splice 메서드와 다르게, 특정 범위의 원소를 잘라서 새로운 배열을 리턴해준다.

slice 메서드 내에, 자르고 싶은 범위의 시작점 index와 그로부터 자를 원소의 갯수 number를 입력해주면 된다.

sort method

array.sort(function(a,b) { return a-b } ); // 오름차순

숫자를 정렬하는 방법으로, sort method 내에 아래의 if문이 축약되어 있는 간략화되어 있는 형태이다.

if(a-b > 0) { return 1}
if(a-b < 0) { return -1} 
if(a-b ===0) { return 0}

비교 함수는 기본적으로 -1,0,1을 return 하는데,
a와 b를 비교하여 return 이 1이면 b가 a보다 앞에 오도록,
return 이 -1 이면 a가 b보다 앞에 오도록,
0 이라면 바뀜 없이 그대로 정렬한다.

즉, a-b > 0 이면 a가 b보다 큰 숫자 인것이므로 b가 a보다 앞으로 오도록, a-b가 < 0 이라면 a가 b보다 앞으로 오도록 정렬하게 된다.

comfort zone

for 문과 slice, 그리고 sort를 이용하여 문제를 풀이하였다. 여기서 주의할 점은 slice(index,number) 구조이다.

처음에는 number에 자르고 싶은 원소들의 마지막 index를 넣어 원하지 않은 결과를 얻었는데, 다시 한 번 복기하자면 number는 자르고 싶은 원소 배열의 시작 index로부터 자르고 싶은 원소의 갯수이다.

또한, 오름차순 정렬에 있어서 return a-b 인지 return b-a 인지 헷갈려서 일단 두 개 다 해보고 맞는 걸로 제출하긴 했는데.. 이에 대한 이해가 좀 더 필요할 것 같다.

profile
Get out of my comfort zone

0개의 댓글