숫자로 이루어진 배열을 입력 받을 때, 같은 값로 이루어진 페어가 몇쌍이냐?
중복을 검사하기 위한 배열 checkArr,같은 숫자가 몇개나 들어왔는지 확인하기 위한 배열 cntArr,현재 값을 카운팅하는 변수 cnt를 생성한다.
입력 받은 배열을 순회하면서 값이 checkArr에 존재하지 않으면 checkArr에 삽입하면서 하고 cnt를 1 증가시킨다. 그리고 입력 받은 배열에 같은 값이 존재하지 않을 때까지 while문을 돌려 총 몇개가 있는지 체크하고 while문을 벗어나면 카운팅한 횟수를 cntArr에 삽입하고 cnt를 0으로 초기화시킨다.
입력 받은 배열에 대한 순회가 끝나면 cntArr를 순회하면서 해당 인덱스 값이 짝수면 2로 나눈 후 총합에 더하고, 홀수면 1을 뺀 후 총합에 더한 다음 총합을 리턴한다.
'use strict';
const fs = require('fs');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', function(inputStdin) {
inputString += inputStdin;
});
process.stdin.on('end', function() {
inputString = inputString.split('\n');
main();
});
function readLine() {
return inputString[currentLine++];
}
/*
* Complete the 'sockMerchant' function below.
*
* The function is expected to return an INTEGER.
* The function accepts following parameters:
* 1. INTEGER n
* 2. INTEGER_ARRAY ar
*/
function sockMerchant(n, ar) {
// Write your code here
const cntArr = [];
const checkArr = [];
let cnt = 0;
let total = 0;
for(let i=0; i<ar.length; i++) {
if (checkArr.indexOf(ar[i]) === -1) {
let j = i;
checkArr.push(ar[i]);
cnt++;
while(ar.indexOf(ar[i],j+1) !== -1) {
j = ar.indexOf(ar[i],j+1);
cnt++;
}
cntArr.push(cnt);
cnt = 0;
}
}
for(let i=0; i<cntArr.length; i++){
if(cntArr[i] > 1) {
if(cntArr[i] %2 === 0) {
total += cntArr[i]/2;
} else {
total += (cntArr[i]-1)/2;
}
}
}
return total;
}
function main() {
const ws = fs.createWriteStream(process.env.OUTPUT_PATH);
const n = parseInt(readLine().trim(), 10);
const ar = readLine().replace(/\s+$/g, '').split(' ').map(arTemp => parseInt(arTemp, 10));
const result = sockMerchant(n, ar);
ws.write(result + '\n');
ws.end();
}
function sockMerchant(n, ar) {
const countMap = new Map();
let totalPairs = 0;
for (const color of ar) {
const count = (countMap.get(color) || 0) + 1;
countMap.set(color, count);
if (count % 2 === 0) {
totalPairs++;
}
}
return totalPairs;
}
맵 객체를 생성하고 입력 받은 배열을 순회하며 해당 요소의 값을 key, 카운팅한 횟수 count를 value로 설정함. 순회하면서 count를 2로 나눈 나머지가 0이면 total을 증가시킴.
for..of 문
Map 객체