알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
Mississipi
?
zZa
Z
//주어진 단어에서 가장 많이 사용된 알파벳을 출력하는 문제
const fs = require("fs")
//대문자로 변경
const input = fs.readFileSync('/dev/stdin').toString().toUpperCase();
let count= new Array(26).fill(0); //26길이만큼 0으로 배열 초기화
for(let i=0; i<input.length; i++){ //count에 나온 알파벳 수만큼 추가
count[input.charCodeAt(i)-65]++;
}
var max = Math.max(...count); //count배열에서 가장 큰 값
var index = count.indexOf(max); //count배열에서 가장 큰 값의 처음 인덱스
let own = true; //max값이 2개 이상인지 확인
for(let j=0; j<26; j++){
if(count[j] === max && j !== index){
own = false;
}
}
if(own == true){
console.log(String.fromCharCode(index+65));
}
else{
console.log('?');
}
대문자로 입력값을 바꾸고 길이가 26인 count 배열을 만들었다. input의 길이만큼 반복하며 input의 알파벳을 아스키코드로 바꿔주고 -65(A)를 하여 A면 count[0]++, B면 count[1]++가 되게 하였다.
count에 input의 알파벳 수만큼 저장하게 한 것이다.
count에서 가장 큰 값이 input에서 가장 많이 사용된 알파벳의 횟수이고, 그 값의 인덱스로 몇 번째 알파벳인지 알 수 있다.
indexOf는 처음 인덱스를 반환하므로 같은 값이 2개 이상인 경우를 확인할 수 없었다.
따라서 가장 큰 값과 그것의 인덱스가 같은지 다른지를 판별하여 두개 이상일 경우 ?를 하나일 경우 알파벳을 출력해주었다.
toUpperCase()
를 사용해서 대문자로 입력값을 받았다.fill()
메서드는 배열의 시작 인덱스부터 끝 인덱스의 이전까지 정적인 값 하나로 채웁니다.const array1 = [1, 2, 3, 4];
// fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
// expected output: [1, 2, 0, 0]
// fill with 5 from position 1
console.log(array1.fill(5, 1));
// expected output: [1, 5, 5, 5]
console.log(array1.fill(6));
// expected output: [6, 6, 6, 6]
charCodeAt()
메서드는 주어진 인덱스에 대한 UTF-16 코드를 나타내는 0부터 65535 사이의 정수를 반환합니다.Math.max()
함수는 입력값으로 받은 0개 이상의 숫자 중 가장 큰 숫자를 반환합니다.console.log(Math.max(1, 3, 2));
// expected output: 3
console.log(Math.max(-1, -3, -2));
// expected output: -1
const array1 = [1, 3, 2];
console.log(Math.max(...array1));
// expected output: 3
indexOf()
메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환합니다.String.fromCharCode()
메서드는 UTF-16 코드 유닛의 시퀀스로부터 문자열을 생성해 반환합니다. (아스키코드를 문자열로)