주어진 조건에 따른 동적 2차 배열을 생성하고 쿼리(q) 상태에 따른 처리 수행
주어진 설명이 이해가 불가능하여 해석법 검색 후 수행함
풀이를 정리하다 보니 HashTable 과 로직이 비슷한 느낌..?
규칙 및 조건
- n 개의 빈 배열을 가지는 2차원 arr 이 존재하며, 모든 배열은 0으로 인덱싱 됨
- lastAnswer는 초기값 0 임
- 주어지는 쿼리(queries)는 2개의 타입(q)을 가짐
- queries는 query를 인자로 가지는 배열
- query: [q, x, y] (이때 , q는 1 또는 2)
- query 타입별 처리법
- Query: 1 x y
- idx 는 (x ⨁ lastAnswer) % n
- arr[idx]에 y 값 추가
- Query: 2 x y
- idx 는 (x ⨁ lastAnswer) % n
- lastAnswer 에 arr[idx][y % size(arr[idx]) 값을 대입
- 새로운 lastAnswer는 answer 배열에 저장
- Query: 1 x y
- ⨁ 는 XOR 연산자
- a ⨁ b => a ^ b
- size(arr[idx]) 는 arr[idx]의 인자 수
- q = 2 일 때의 구해지는 lastAnswer 값들 (저장된 answer) 을 출력
제한사항
- 1 ≤ n, q ≤ 10⁵
- 0 ≤ x, y ≤ 10⁹
- q = 2 는 빈 배열이나 인덱스를 쿼리하지 않음
나의 풀이
- 값 초기화
- 빈 arr 배열 생성
- 설명에서는 n개의 빈 배열이라고 하나, n개만큼 생성해도 그 이상의 index가 나오기 때문에 필요할 때 마다 확장시키기로 함
- answer 배열 생성
- lastAnswer 초기화
- 빈 arr 배열 생성
- for loop 로 queries 배열만큼 반복
- 각 query[q, x, y]로부터 주어진 연산자를 통해 idx 추출
- q = 1 일 때, arr[idx]에 y 값 추가. (단, arr[idx] 가 없으면 빈배열 생성)
- q = 2 일 때, arr[idx][y%size(arr[idx])] 값을 lastAnswer에 대입
- lastAnswer 값을 answer 에 추가
// 생략
/*
* Complete the 'dynamicArray' function below.
*
* The function is expected to return an INTEGER_ARRAY.
* The function accepts following parameters:
* 1. INTEGER n
* 2. 2D_INTEGER_ARRAY queries
*/
function dynamicArray(n, queries) {
// Write your code here
const len = queries.length;
let lastAnswer = 0;
const answer = [];
const arr = [];
for(let i = 0; i < len; i++) {
const [q, x, y] = queries[i];
const idx = (x^lastAnswer)%n;
if (+q === 1) {
if (!arr[idx]) {
arr[idx] = [];
}
arr[idx].push(y);
} else {
const idx2 = y % (arr[idx].length);
lastAnswer = arr[idx][idx2];
answer.push(lastAnswer);
}
}
return answer;
}
// ... 후략
결과
'HackerRank' 카테고리의 다른 글
[해커랭크] (Data Structures - Arrays) Array Manipulation (javascript) (0) | 2022.09.05 |
---|---|
[해커랭크] (Data Structures - Arrays) 2D array - DS; 모래시계 행렬 (javascript) (0) | 2022.09.05 |
[해커랭크] (Implementation Algorithms) Number Line Jumps (javascript) (0) | 2022.08.22 |
[해커랭크] (Implementation Algorithms) Grading Students (javascript) (1) | 2022.08.22 |
[해커랭크] (Constructive Algorithms) Flipping the Matrix (0) | 2022.08.21 |