단어 공부(1157) - JS
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]를 출력해주면 끝!!
자세한 설명은 코드 주석 참고~
Author And Source
이 문제에 관하여(단어 공부(1157) - JS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pjh1011409/단어-공부1157-JS저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)