단어 공부(1157) - JS

1536 단어 baekjoonbaekjoon

2일 동안 고민 끝에 스스로 풀어낸 뿌듯한 문제입니다. ㅜㅜ (진짜 한참 멀었다....)
많은 분들이 풀이방법을 올려주시지만, 이번엔 봐도 이해가 잘 안가기도 했고, 뭔가 진짜 스스로 만들어 보고 싶고 내가 아는 것들을 잘 응용만 하면 문제가 풀릴거 같다는 생각에 2일동안 백준 푸는 시간에 이 문제만 팠습니다...ㅎㅎ

중요한 포인트!
배열의 중복되는 부분과 중복 갯수를 추출하는 코드

const arr = ['a', 'b', 'a', 'b', 'c'];
const result = arr.reduce((accu,curr)=> {
  accu.set(curr, (accu.get(curr)||0) +1) ;
  return accu;
},new Map());
for (let [key, value] of result.entries()) {
  console.log(key + ' : ' + value);
}
결과:
a : 2
b : 2
c : 1

그 다음에 찾아오는 문제는 이 것을 이용하여 어떻게 최댓값을 갖는 알파벳을 출력하냐 입니다.
따라서, 저는 각각의 key, value 값들을 배열에 각각 저장했습니다.
제가 생각한 논리!
key 값과 value 값을 배열에 저장하면
ex) 입력값 zZa
maxCount = [2,1] , maxAlpa = [Z,A]
=> maxCount 배열안에서 가장 큰값을 구하고, 그 큰값이 존재하는 인덱스 값은 곧 maxAlpa 배열의 인덱스 값이다는 것입니다.
즉, 2가 최대값이고, 그 인덱스값 0은 maxAlpa에서는 Z를 가리킵니다. 이말은 Z 가 2개로 가장 많은 알파벳이라는 뜻입니다.

마지막으로 생각해야 할 것은 최대값이 두개 이상 존재하면 ? 를 출력하라는 문제 의도입니다.
따라서, counter 를 이용하여 최대값을 찾았을때 1증가를 하고, 1보다 큰 값이 되면 최대값이 그 이상으로 존재한다는 뜻으로 ? 를 출력하게 합니다.
만약 그렇지 않다면 마지막 코드인 maxAlpa[maxIndex]를 출력해주면 끝!!

자세한 설명은 코드 주석 참고~


좋은 웹페이지 즐겨찾기