const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')
const n = input[1].split(' ')
const m = input[3].split(' ')
const solution = (n, m) => {
let result = Array(m.length).fill(0)
m.forEach((el1,i) =>
n.forEach((el2,j) => {
if(el1 === el2) result[i] += 1
})
)
return result.join(' ')
}
console.log(solution(n, m))
forEach()를 사용하여 이중반복문으로 구현했다.
1%에서 멈추더니 시간초과가 발생했다.
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')
const n = input[1].split(' ')
const m = input[3].split(' ')
const solution = (n, m) => {
let result = []
for(let el1 of m){
let count = 0
for(let el2 of n){
if(el1 === el2) count++
}
result.push(count)
}
return result.join(' ')
}
console.log(solution(n, m))
풀이1과 동일한 로직을 for문으로 구현해보았다.
3%에서 멈추더니 여전히 시간초과가 발생했다.
참조: https://velog.io/@pletis/백준-10816번-숫자-카드2Node.jsJavaScript
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')
// const input = ['10',
// '6 3 2 10 10 10 -10 -10 7 3',
// '8',
// '10 9 -5 2 3 4 5 -10']
const n = input[1].split(' ')
const m = input[3].split(' ')
const solution = (n, m ) => {
let result = [];
let resultMap = new Map();
for (el1 of n) {
if (resultMap.has(el1))
resultMap.set(el1, resultMap.get(el1) + 1);
else resultMap.set(el1, 1);
}
for (el2 of m) {
if (resultMap.has(el2)) result.push(resultMap.get(el2));
else result.push(0);
}
return result.join(' ')
}
console.log(solution(n, m))
먼저 n에 대해 for문으로 순회하여 전역객체 resultMap에 요소 el1이
있으면 +1 하고 없으면 1 할당한다
순회를 마치고 resultMap의 값은 다음과 같다.
그다음 m에 대해 for문으로 순회하여 resultMap에 요소 el2가
있으면 el2를 키로 갖는 값을, 없으면 0을 result에 push()한다.
- 객체는 키-값 쌍과 키의 원래 삽입 순서를 기억합니다.
const input = ['10',
'6 3 2 10 10 10 -10 -10 7 3',
'8',
'10 9 -5 2 3 4 5 -10']
const n = input[1].split(' ')
const m = input[3].split(' ')
const solution = (n, m) => {
let result = [];
const count = n.reduce( (ac,v) => ({...ac, [v] : ( ac[v] || 0 ) + 1 }), 0)
m.forEach(el => result.push(count[el] || 0))
return result.join(' ')
}
console.log(solution(n, m))
배열 n의 요소-개수 쌍을 갖는 객체 count를 선언하고
배열 m의 요소에 대해 순회하여 count에 값이 있으면 result에 그 값을 넣고 없으면 result에 0을 넣는다.
👉 n과 m을 일대일로 비교했던 풀이1,2와 달리
풀이 3처럼 중복요소의 개수를 먼저 확인함으로써
로직을 단순화시켰다고 생각했는데 여전히 시간초과가 발생했다.
아마도 reduce() 때문이 아닐까.