목차
문제 : Programmers - 수열과 구간 쿼리 4
문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
필요 알고리즘
- 구현
- 문제에서 제시된 대로 구현해주면 됩니다.
풀이
문제에서 제시된대로 구현해주면 된다. 별다른 알고리즘 없이 그냥 배열순회만 사용해 풀어도, 총 1000개의 쿼리에 대해 각 O(arr의 길이)만큼 필요하므로, O(1000^2)으로 풀 수 있다.
예를들어 [2, 2, 4, 5, 4]가 query [0, 3, 3]을 통해 [3, 2, 4, 6, 4]로 바뀌는 과정은 아래와 같다.
이하 코드는 약간 효율성을 더하기 위해 인덱스 s부터 e까지 모두 순회하지 않고,
1. s이상이면서 k의 배수인 가장 작은 수를 우선 찾고
int i = s/k*k;
if (s%k != 0) i+=k;
2. 이후 k만큼 증가하면서 배열을 순회한다.
while (i <= e) {
arr[i]++;
i+=k;
}
하지만 그냥 s부터 e까지 하나씩 직접 순회해도 통과 가능한 문제이다.
코드 : github
/**
* 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
*/
class Solution {
public int[] solution(int[] arr, int[][] queries) {
for (int[] query : queries) {
int s = query[0];
int e = query[1];
int k = query[2];
if (k == 0) {
if (s==0) arr[0]++;
continue;
}
int i = s/k*k;
if (s%k != 0) i+=k;
while (i <= e) {
arr[i]++;
i+=k;
}
}
return arr;
}
}
'PS > Programmers' 카테고리의 다른 글
[자바] 프로그래머스 - 석유 시추 ([PCCP 기출문제] 2번) (Lv2, Java) (2) | 2024.01.22 |
---|---|
[자바] 프로그래머스 - 수열과 구간 쿼리 2 (Lv0, Java) (0) | 2023.06.16 |
[파이썬] 프로그래머스 - 과일 장수 (Lv1, Python) (0) | 2023.02.06 |
[자바] 프로그래머스 - 스킬트리 (Lv2, Java) (0) | 2023.02.03 |
[자바] 프로그래머스 - 올바른 괄호 (Lv2, Java) (0) | 2023.01.29 |
댓글