작성
·
196
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
const input = `15
BACBACCACCBDEDE`.split('\n');
let arr = input[1].split('');
function solution(arr){
let studentMap = new Map();
let winner = '';
let maxNum = 0;
for(let i = 0; i < arr.length; i++){
studentMap.set(arr[i], studentMap.get(arr[i]) +1 || 1);
}
let studentArr = [...studentMap]
studentArr.forEach(arr => {
if(arr[1] > maxNum){
maxNum = arr[1];
winner = arr[0];
}
})
return winner;
}
console.log(solution(arr));
답변 1
0
안녕하세요^^
잘 하신 코드입니다. 위에 코드에서 빈도수 카운팅을 할 때
for(let i = 0; i < arr.length; i++){
studentMap.set(arr[i], (studentMap.get(arr[i]) || 0) + 1);
}
위와 같이 하면 좋을 것 같습니다. 난이도가 높은 해싱문제를 풀다보면 카운팅을 증가도 시키고 감소도 시키다 보면 value값이 음수로도 가는 경우가 있습니다.
for(let i = 0; i < arr.length; i++){
studentMap.set(arr[i], studentMap.get(arr[i]) +1 || 1);
}
위와 같이 님처럼 코드를 짜면 만약 studentMap.get(arr[i])값이 -1이면 위에 코드는 -1에 1을 더해 0으로 1증가를 시키는게 아니라
(-1 + 1) || 1의 결과는 1이므로, -1에서 바로 1로 2를 증가시키는 결과가 나오는 코드입니다.
답변 정말 감사드립니다 : )