❗ 문제
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/courses/30/lessons/181895
정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.
intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다.
닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여
새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
❓ 나의 풀이
function solution(arr, intervals) {
return arr.slice(intervals[0][0], intervals[0][1]+1).concat(arr.slice(intervals[1][0], intervals[1][1]+1))
}
slice 메소드와 concat 메소드를 사용해서 문제를 풀었다.
테스트 케이스에서 intervals 의 0번째 인덱스의 범위를 보면 [1, 3] 이다.
일단 저 1과 3에 접근을 해야 하는데 배열은 대괄호를 이용해 특정 위치로 접근할 수 있다.
intervals[0] 으로 0번째 인덱스 [1, 3] 에 접근하고
intervals[0][0] 으로 0번째 인덱스 안의 0번째 인덱스인 1로 접근할 수 있다.
그러면 3 으로 접근하려면? intervals[0][1] 이런 식으로 접근해 주면 된다.
이렇게 접근한 위치를 가지고 arr 의 범위를 잘라야 하는데, 이때 slice 메소드를 사용했다.
근데 slice 메소드는 첫 번째 인자부터 두 번째 인자까지 잘라주는데 두 번째 인자는 포함하지 않는다.
무슨 말이냐면, 우리가 arr.slice(1, 3) 으로 자르면 arr 의 인덱스 1부터 2까지 잘라서 2, 3만 반환해 준다는 말이다.
근데 문제 조건이 양 끝값과 그 사이의 값을 모두 포함해야 된다고 했으니,
intervals[0][1] 에 + 1을 해주면 arr 의 인덱스 1부터 3까지 잘라서 우리가 원하는 값인 2, 3, 4를 반환받을 수 있다.
intervals 의 1번째 인덱스도 똑같은 방식으로 접근해서 arr 을 잘라주면 된다.
그리고 이걸 합치기 위해서 concat 메소드를 사용했다.
concat 메소드는 인자로 주어진 배열이나 값들을 기존 배열에 합쳐서 새 배열로 반환해 준다.
💡 정리
1. slice()
slice(n, m) ➡ n 부터 m 까지 반환
- n: 시작점
- m
- 없으면 문자열 끝까지
- 양수면 그 숫자까지 (포함하지 않음)
- 음수면 끝에서부터 셈
- 예시
let arr = ['a', 'b', 'c', 'd', 'e'];
console.log(arr.slice(2)); // [ 'c', 'd', 'e' ]
console.log(arr.slice(1, 3)); // [ 'b', 'c' ]
// 인덱스 2는 'c' 이고, 'c' 부터 시작하는데 -1 즉, 맨 뒤부터 시작해서 1개를 센다.
// 맨 뒤에서 1개를 세면 'e' 이고, 'e' 는 포함하지 않으니까 'c'와 'd' 를 반환하는 것이다.
console.log(arr.slice(2, -1)); // [ 'c', 'd' ]
2. concat()
인자로 주어진 배열이나 값들을 기존 배열에 합쳐서 새 배열로 반환해 주는 메소드
- 예시
let arr = [1, 2];
console.log(arr.concat(3)); // [ 1, 2, 3 ]
console.log(arr.concat([3, 4])); // [ 1, 2, 3, 4 ]
console.log(arr.concat([3, 4], 5, 6)); // [ 1, 2, 3, 4, 5, 6 ]
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 커피 심부름 (Level 0, JavaScript) (0) | 2024.07.31 |
---|---|
[프로그래머스] 모음 제거 (Level 0, JavaScript) (0) | 2024.07.30 |
[프로그래머스] 특정한 문자를 대문자로 바꾸기 (Level 0, JavaScript) (0) | 2024.04.30 |
[프로그래머스] rny_string (Level 0, JavaScript) (0) | 2024.04.30 |
[프로그래머스] 공백으로 구분하기 1 (Level 0, JavaScript) (0) | 2024.04.30 |