저장을 습관화
프로그래머스 LV.0 수열과 구간 쿼리 4 본문
프로그래머스 LV.0 수열과 구간 쿼리 4
https://school.programmers.co.kr/learn/courses/30/lessons/181922
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 명
수열과 구간 쿼리 4
2. 문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
3. 제한 사항
- 1 ≤ arr의 길이 ≤ 1,000
- 0 ≤ arr의 원소 ≤ 1,000,000
- 1 ≤ queries의 길이 ≤ 1,000
- 0 ≤ s ≤ e < arr의 길이
- 0 ≤ k ≤ 5
4. 예시
arr | queries | result |
[0, 1, 2, 4, 3] | [[0, 4, 1], [0, 3, 2], [0, 3, 3]] | [3, 2, 4, 6, 4] |
5. 기본 제공 코드
function solution(arr, queries) {
var answer = [];
return answer;
}
6. 제출한 내 답
const solution = (arr, queries) => {
return arr.map((v, i) => {
for (j = 0; j < queries.length; j++) {
if (i >= queries[j][0] && i <= queries[j][1] && i % queries[j][2] === 0) {
v += 1;
}
}
return v;
});
};
6-2. VSC에 작성한 내용
const solution = (arr, queries) => {
// queries[[0,3,2]] 이면,
// arr[0] ~ arr[3]가 대상이 되고,
// 이 중 인덱스가 2의 배수이면 해당 요소에 1을 더한다
// 그렇다면 인덱스가 0인 경우는? => '0은 모든 정수의 배수이다.'
// queries[[n,m,0]]인 경우는? => 0의 배수는 0 뿐이다.
// 배수를 반대로 말하면 그 수에 의해 나누어 떨어지는 수이다.
// 접근을 어떻게 해야할까
// 1. queries를 검사한다.
// arr[queries[0][0]] ~ arr[queries[0][1]]
// 그렇다면 배열 메소드 안에서 배열 메소드를 사용하면?
// foreach, reduce, map, filter
// map안에 reduce, 그 대상은?
return arr.map((v, i) => {
for (j = 0; j < queries.length; j++) {
if (i >= queries[j][0] && i <= queries[j][1] && i % queries[j][2] === 0) {
v += 1;
}
}
return v;
});
};
// 테스트
console.log(
solution(
[0, 1, 2, 4, 3],
[
[0, 4, 1],
[0, 3, 2],
[0, 3, 3],
]
)
);
7. 특이사항
굉장히 어려웠다
어떻게 접근해야할지 굉장히 헷갈렸다
이게 진짜 정답률 83%라고?
8. 다른 사람이 작성한 답
8-1. 가장 많이 쓰인 풀이법, for of 문
function solution(arr, queries) {
for(let [s, e, k] of queries) {
for(let i = s; i <= e; i++) {
if(i % k === 0) arr[i]++;
}
}
return arr;
}
8-2. 두번째로 많이 쓰인 풀이법, 중첩 for문
function solution(arr, queries) {
for(let i = 0 ; i < queries.length ; i++){
const[s,e,k] = queries[i];
for(let j = s ; j <= e ; j++)
if(j%k===0 ) arr[j]++;
}
return arr;
}
'코딩 테스트 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 LV.0 리스트 자르기 (0) | 2023.09.27 |
---|---|
프로그래머스 LV.0 2의 영역 (0) | 2023.09.27 |
프로그래머스 LV.1 내적 (0) | 2023.09.27 |
프로그래머스 LV.1 수박수박수박수박수박수? (0) | 2023.09.26 |
프로그래머스 LV.0 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2023.09.26 |