Koala - 9기/기초 알고리즘 스터디

[백준/node.js] 1157번 단어공부

yer_in 2023. 1. 22. 22:54

www.acmicpc.net/problem/1157

 

1157번: 단어 공부

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

www.acmicpc.net

코드


let input = require('fs').readFileSync('/dev/stdin').toString().toLowerCase();

const result = new Array(26).fill(0);

for (let i = 0; i < input.length; i++) {
  result[input.charCodeAt(i) - 97] ++;
}

const max = Math.max(...result);
const index = result.indexOf(max);

let isSame = false;

for (let j = 0; j < 26; j++) {
  if (result[j] === max && index != j) {
    isSame = true;
    break;
  }
}

console.log(isSame ? "?" : String.fromCharCode(index + 65));

 

문제풀이


 

처음에는 for 문을 여러 번 써서 풀었는데 시간 초과가 나와버려서 다시 시도해보았다.

charCodeAt 메서드를 통해 유니코드를 바로 알 수 있다.

이를 통해 a-z까지의 배열을 만들고  0을 채워준다.

 indexOf 메서드로 max값이 위치한 배열의 index값을 구할 수 있었다.

출력 문에서 만약 중복값이 있었다면 "?"을 출력해주고 아니라면 String.fromCharCode 메서드를 사용하여 해당 index 값에서 65를 더한 값을 (65 부터 "A") 문자열로 생성해 반환하도록 하였다.