728x90
반응형

 

 

백준 1157번 Node.js(자바스크립트) 풀이 


❓ 문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

 

💻 입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

 

📈 출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

 

 

 

반응형

👩🏻 내가 제출한 코드

const input = require("fs").readFileSync("dev/stdin").toString().trim();
const alphabet = input.toUpperCase();
const count = {};

//문자별 빈도수 계산
for(const char of alphabet){
    count[char] = (count[char]||0)+1;
}

//가장 높은 빈도수 찾기
let maxCount=0;
let result = '';
for(const char in count){
    if(count[char]>maxCount){
        maxCount = count[char];
        result = char;
    }else if(count[char]==maxCount){
        result='?';
    }
}

console.log(result);

 

👩🏻‍💻 풀이

const input = require("fs").readFileSync("dev/stdin").toString().trim();

>> 입력값이 한 개(한 줄)일때

 

const alphabet = input.toUpperCase();
const count = {};

>> 출력이 대문자로 출력하라는 문제이므로 toUpperCase()로 모든 알파벳을 대문자로 변환

>> const count = { }; 알파벳과 빈도수를 저장할 객체

 

//문자별 빈도수 계산
for(const char of alphabet){
    count[char] = (count[char]||0)+1;
}

>> alphabet 객체 요소마다 반복해서 count 객체에 빈도수를 저장

>> for...of : 객체마다 반복되는 실행문 (https://coding-with-jina.tistory.com/149)

 

//가장 높은 빈도수 찾기
let maxCount=0;
let result = '';
for(const char in count){
    if(count[char]>maxCount){
        maxCount = count[char];
        result = char;
    }else if(count[char]==maxCount){
        result='?';
    }
}

>> count에 저장된 객체 중 value값을 maxCount와 비교하여 가장 빈도수가 큰 숫자를 maxCount에 저장하고 result에는 그에 해당하는 key값을 저장하도록 한다.

>> 만일 이미 저장된 maxCount와 값이 같은 빈도수가 있다면 문제에 나와있는 것 처럼 ?로 출력하기 위해 result에 ?로 최종 저장한다.

>> for...in : 객체의 모든 열거 가능한 속성을 반복, 주로 객체의 속성(키)을 통해 반복하고자 할 때 사용

 

 


🔗문제 링크 

https://www.acmicpc.net/problem/1157

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

 


 

728x90
반응형