백준 1157 단어 공부
단어 공부
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
예제 입력 1
Mississipi
예제 출력 1
?
예제 입력 2
zZa
예제 출력 2
Z
예제 입력 3
z
예제 출력 3
Z
예제 입력 4
baaa
예제 출력 4
A
풀이
우선 필요한정보는 주어진 조건의 문자가 몇개인지를 확인
각문자들의 갯수를 카운트해서 어떤 문자가 가장많은지 확인
이 필요하다.
우선 문자열로 주어진 조건을 객체로 만들어서 풀기쉽게 정리해보자
const input = "Mississipi";
const charMap = {};
for (let char of input.toLowerCase()) {
charMap[char] = charMap[char] ? charMap[char] + 1 : 1;
}
for of
반복문은 요소(값)을 가져오므로 m,i,...등을 가져온다
(for in
반복문은 인덱스를 가져옴)
그후 Max Chars Algorithm(가장 많이 쓰인 문자 찾기 알고리즘)
을 이용해 객체의 성질 (객체['키'] = 값) 을 이용해 객체안에
키에 값이 있다면 +1 없다면 1 을 넣는 코드인
charMap[char] = charMap[char] ? charMap[char] + 1 : 1;
을 작성에 넣자.
위의 코드를 결과값으로 보면
charMap : { m: 1, i: 4, s: 4, p: 1 }
이런 값을
얻는다.
그다음으로는 여기 객체안에있는 값들을 비교해 가장 큰수만을 얻는
코드를 작성해야 하는데 이때 Math.max.apple(null,배열)
을 이용하자
코드로 작성해보면
const max = Math.max.apply(null,Object.values(charMap)
을 작성하는데 여기서 Object.values
는 매서드의 매개변수로
들어온 객체에 대해서 객체들의 값을 배열로 반환해주는 매서드이다.
위의 코드를 실행하면 max
는 4가나온다.
다음으로는 최대개수로 나온 숫자가 맞는지 확인하는 과정을 거쳐야한다.
이때도 반복문을 이용해 객체들의 값을 확인하는 코드를 짜면된다.
코드로 옮겨보면
for ( let char in charMap) {
if ( charMap[char] === max) {
maxChar = char;
count++;
}
if (count >= 1) {
console.log("?");
return;
}
}
console.log(maxChar.toLowerCase());
위의 코드를 작성하면 끝난다.
const input = "Mississipi";
const charMap = {};
for (let char of input.toLowerCase()) {
charMap[char] = charMap[char] ? charMap[char] + 1 : 1;
}
// console.log("charMap : ", charMap["m"]);
const max = Math.max.apply(null, Object.values(charMap));
let maxChar = "";
let count = 0;
for (let char in charMap) {
if (charMap[char] === max) {
maxChar = char;
count++;
}
if (count >= 1) {
console.log("?");
return;
}
}
console.log(maxChar.toLowerCase());
위의 코드가정답이다.
정리해보자면
Author And Source
이 문제에 관하여(백준 1157 단어 공부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kyle-shk/백준-1157-단어-공부저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)