▶reduce() 함수 & ▶구조 분해 할당 를 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr [i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 1,000
- 0 ≤ arr의 원소 ≤ 1,000,000
- 1 ≤ queries의 길이 ≤ 1,000
- 0 ≤ s ≤ e < arr의 길이
- 0 ≤ k ≤ 5
입출력 예 & 설명
입출력 예 #1
- 각 쿼리에 따라 arr가 다음과 같이 변합니다.
- 따라서 [3,2,4,6,4]를 return 합니다.
나의 풀이
먼저 이번 문제는 이해하기가 쉽지 않았습니다.
많은 분들이 저처럼 i가 arr[i]의 값을 의미하는 줄 알거나, 문제 자체가 이해가 안 되는 분들이 계실 거 같습니다.
입출력 예를 통해 보다 쉽게 이해할 수 있도록 정리를 해보자면 다음과 같습니다.
s <= i <= e 가 k의 배수라는 의미는
s = 0 , e = 4 , k = 1 → 0 <= i <= 4 인 i가 k의 배수라는 뜻입니다.
queries의 인덱스 모두를 표현하면 다음과 같습니다.
i( 0 ~ 4 ) % 1 == 0 → [True, True , True , True , True ]
i( 0 ~ 3 ) % 2 == 0 → [True, False, True , False , True ]
i( 0 ~ 3 ) % 3 == 0 → [True , False , False , True , False]
True인 값만 즉 arr[i]요소만 1을 더하면 되는 문제입니다.
그럼 이제 풀이를 설명하자면 2번째 줄에서 for of문을 사용하여 queries의 요소에 접근해 줍니다.
그리고 3번째 줄에서 s <= i <= e의 조건을 만족하는 for문을 사용하고 i % k를 만족하면 해당 arr [i]의 요소에 1을 더해주어 마무리해주었습니다.
다른 풀이
다른 풀이에서는 reduce() 함수를 사용해 주었습니다.
"나의 풀이"와 같은 맥락으로 구조 분해 할당을 이용하여 s, e, k를 받아주고, 중요한 포인트인 arr을 전개연산자(...)를 사용하여 전개해 준 다음에 초기값으로 사용해 주었습니다.