
배열 a는 n개의 정수를 가지고 있으며, n는 5 이상의 수입니다. n개의 정수 중, 단 2개의 수만 다른 수를 갖고 나머지 수는 모두 동일합니다. 이때 이 두 수의 인덱스를 찾아서 출력하세요.
중복이 없는 수를 찾는 방법 과 다르게 현재는 indexOf를 이용할 수 없습니다. 따라서 for문으로 수동 순회하여 찾아내야 합니다.
우선, 각 인덱스를 돌면서 어떠한 수가 2번만 나오는지 알아야 합니다. 해당 수를 알고, 그 수를 가지고 있는 인덱스를 찾아서 반환하면 됩니다.
function solution(a) {
let count = new Map();
let result = [];
for (let n of a) {
count.set(n, (count.get(n) || 0) + 1);
}
for (let i = 0; i < a.length; i++) {
if (count.get(a[i]) === 2) {
result.push(i);
}
}
return result;
}
우선 결과 값과 (빈 배열), 각 인덱스의 빈도를 저장할 count라는 새로운 map을 선언합니다.
a 안의 숫자들을 n이라고 칭하고 for of를 통해 순회합니다.
count 안에 n 없음 → undefined를 반환하는데, 이때 || 연산자를 사용하여 0으로 대체합니다.
n이 존재 → 그 값(빈도)를 가져옵니다.
이후 불러온 값에 1을 더하고, 최종적으로 count 안에 n이라는 키와 그 숫자의 빈도를 설정합니다.
count 안에 빈도와 숫자를 저장했다면, 배열 a를 톨면서, a의 i 번째 값이 count 에서 2의 값을 가지고 있다면 그 i 값을 결과값 배열에 집어 넣습니다.