K번째수

·2022년 3월 21일
0

알고리즘

목록 보기
15/47

하하 개판이군 이게 뭔 개소리지?

처음 보자마자 음! 이렇게 풀면 되겠구나!!!! 라고 생각은 했다
근데 모르겠다. 어떻게 접근을 해야하는거지?

commands에 들어있는 수를 순서대로 2,5,3 / 4,4,1 / 1,7,3을 가져오면 되겠구나!
근데 2차원 배열은 제대로 다뤄본 적이 없어서 그냥 콘솔로 다 찍어봤다.
모르면 찍어보면 된다 뭔가 나올 때까지 (진짜)

그래서 확인을 해보니까 이런식으로 하면 해당하는 값을 가져올 수 있었다.

아! 그럼 세번만 출력하면 되고, 커맨드는 3개의 배열로 구성되어있으니까
인덱스값은 0부터 2까지고 각각 요소를 접근할때 맨처음에 적어야하는 것은 0,1,2로 공통되니까
for로 반복하면 되겠다! 해서 짜봤다.

for (i=0; commands.length; i++){
	let first = commands[i][0]
	let second = commands[i][1]
	let third = commands[i][2]
}

그런데 조건을 자세히 보니 배열을 자르라는 이야기가 적혀있다.

각 [i][0]에서 시작해서, [i][1]까지 를 지정을 하라고 했으니

array.slice()메소드를 사용해서 자르면 되겠다
slice는 두개의 값을 가져오고 앞에는 시작하는 인덱스의 이상 값, 뒤에는 종료하는 인덱스의 미만값
이니까

그대로 array.slice(first,second)를 하면 원하는 값이 안나온다
인덱스는 1이 아니라, 0부터 시작하니까

그래서 array.slice(first-1,second)을 사용하면 원하는 값을 얻을 수 있다.


이제 두 스탭이 남았는데
1. 오름차순으로 정렬을 하고
2. commands[i][2]값으로 뽑아서 저장만 하면 된다.

정렬은 array.sort()를 사용하면 될 것이고
commads[i][2]의 값은 그냥 뒤에 붙여넣으면 되고
저장은 array.push()로 넣으면 될 것이다.

그럼 일단 지금까지 만든 구조는 이러하다

for (i=0; commands.length; i++){
	let first = commands[i][0]-1
	let second = commands[i][1]
	let third = commands[i][2]
    let asr = array.slice(first,second)
}

여기에 정렬을 넣어주면

for (i=0; commands.length; i++){
	let first = commands[i][0]-1
	let second = commands[i][1]
	let third = commands[i][2]
    let asr = array.slice(first,second).sort((a,b)=> a-b)
}

마지막으로 리턴해주는 값만 넣어주면 끝이 난다.

왜 sort()를 하는데? 라는 의문이 생길 수 있는데
((a,b)=> a-b) 이런 것이 들어갔는지는 확인을 해보고 포스트를 할 예정이다.

근데 일단 js의 array.sort()는 숫자 또한 문자열로 보고 있기 때문에, 10 200 30 < 이런식으로 제일 앞에 있는 수를 보고 정렬을 해서 저런 조건을 써야한다.

대문자도 저런식으로 되어있어서 역정렬만 하고 싶어도 정렬 역정렬 두번의 과정을 거쳐야한다(에잉)


밀어넣는 것은 설명이 필요 없으니까, 아래가 최종 코드다!

function solution(array, commands) {
  const as = [];
  for (i = 0; i < commands.length; i++) {
    let f = commands[i][0] - 1;
    let s = commands[i][1];
    let u = commands[i][2] - 1;
    let se = array.slice(f, s).sort((a, b) => a - b);
    as.push(se[u]); // 결국 이것 또한 인덱스 값이라서 위에서 -1을 한 것을 볼 수 있다.
  }
  return as;
}

나도 이해하는데 좀 장시간이 걸려서 일부로 하나하나 풀어가는 과정을 적어봤다
2차원 배열은 또 다루게 될테니까...응....

profile
물류 서비스 Backend Software Developer

0개의 댓글