배열 조각하기
문제 설명
정수 배열 arr와 query가 주어집니다.
query를 순회하면서 다음 작업을 반복합니다.
- 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
- 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.
위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.
입출력 예
arr | query | result |
[0, 1, 2, 3, 4, 5] | [4, 1, 2] | [1, 2, 3] |
- 이번에 매번 처리할 query의 값과 처리 전후의 arr의 상태를 표로 나타내면 다음과 같습니다.
query의 값 | query 처리 전 | query 처리 후 | 비고 |
4 | [0, 1, 2, 3, 4, 5] | [0, 1, 2, 3, 4] | 0번 인덱스의 쿼리이므로 뒷부분을 자른다. |
1 | [0, 1, 2, 3, 4] | [1, 2, 3, 4] | 1번 인덱스의 쿼리이므로 앞부분을 자른다. |
2 | [1, 2, 3, 4] | [1, 2, 3] | 2번 인덱스의 쿼리이므로 뒷부분을 자른다. |
나의 풀이
function solution(arr, query) {
let answer = [...arr];
for (const i in query) {
if (i % 2 === 0 ) answer = answer.slice(0, query[i] + 1);
if (i % 2 !== 0 ) answer = answer.slice(query[i]);
}
return answer;
}
- arr를 복사한 배열 answer를 생성한다.
- query에 for문을 사용하여 index가 짝수인지 홀수인지에 따라 각각 slice 메서드를 적용한다.
- slice 메서드를 적용한 배열을 다시 answer에 할당한다.
- 최종적으로 answer를 return 한다.
다른 사람의 풀이
function solution(arr, query) {
let start = 0;
let end = arr.length;
for (let i = 0; i < query.length; i++) {
i % 2 ? start += query[i] : end = start + query[i];
}
return arr.slice(start, end + 1);
}
for문을 돌 때마다 매번 배열을 slice 할 필요 없이 start와 end라는 변수를 선언 후에 for문을 돌며 이 변수들을 재할당 후, 배열은 최종 한 번만 slice해도 된다. 전혀 생각 못했던 방법인데 매번 배열 자체를 수정하는 것보다는 이 풀이가 더욱 효율적일 거 같다 👍
확실히 풀이 수정 후 코드 실행 시간이 단축되었음!
'알고리즘 > Programmers' 카테고리의 다른 글
[TIL] 2023.06.06 Programmers_순서 바꾸기 (0) | 2023.06.06 |
---|---|
[TIL] 2023.06.04 Programmers_수 조작하기 2 (1) | 2023.06.04 |
[TIL] 2023.06.02 Programmers_배열 만들기 3 (0) | 2023.06.02 |
[TIL] 2023.05.31 Programmers_홀짝에 따라 다른 값 반환하기 (0) | 2023.05.31 |
[TIL] 2023.05.30 Programmers_문자열 겹쳐쓰기 (0) | 2023.05.30 |
댓글