0%

210504_TIL(심심풀이 코딩 문제)

오늘 한 것

공부한 javaScript 코딩 문제

K번째수

문제 설명
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.

입출력 예

[2,6,8,14] -> 168
[1,2,3] -> 6

나의 답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function solution(array, commands) {
const answer = commands.map(
(command) =>
array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[
command[2] - 1
]
);
return answer;
}

console.log(
solution(
[1, 5, 2, 6, 3, 7, 4],
[
[2, 5, 3],
[4, 4, 1],
[1, 7, 3],
]
)
); // [5, 6, 3]
  • 비교적 간단한 문제
  • 메서드 체이닝을 과하게 사용한 것 같다. 가독성이 떨어진다.

Refactoring

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(array, commands) {
const answer = commands.map((commend) => {
const [sPosition, ePosition, position] = commend;

const slicedArr = array
.slice(sPosition - 1, ePosition)
.sort((a, b) => a - b);

return slicedArr[position - 1];
});

return answer;
}
  • 위 코드가 가독성이 더 높아보인다.
  • 억지로 간결하게 만든 코드보다는 보기 편안한 코드가 더 좋다.

음양 더하기

문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

제한 사항

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

입출력 예

absolutes / signs
[4,7,12] [true,false,true] -> 9
[1,2,3] [false,false,true] -> 0

나의 답

1
2
3
4
5
6
7
function solution(absolutes, signs) {
const answer = absolutes.map((v, i) => (signs[i] ? v : -v));

return answer.reduce((acc, cur) => acc + cur, 0);
}

console.log(solution([4, 7, 12], [true, false, true])); // 9
  • 비교적 간단한 문제

출처: programmers

Nyong’s GitHub