https://www.acmicpc.net/problem/1157
const fs = require("fs");
const file = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(file).toString().toUpperCase().split("");
//아스키코드를 이용하기 위해 전체 문자열을 대문자로 변환시켜준다.
let Arr = new Array(26).fill(0);
for (let i = 65; i < 91; i++) {
for (let j = 0; j < input.length; j++) {
if (i === input[j].charCodeAt(0)) {
Arr[i - 65] += 1;
}
}
}
let count = 0;
let maxNum = Math.max(...Arr);
Arr.map((elem) => {
if (elem === maxNum) count++;
});
count === 1
? console.log(String.fromCharCode(Arr.indexOf(maxNum) + 65))
: console.log("?");
let Arr = new Array(26).fill(0);
알파벳 개수에 맞는 배열 생성 / 0으로 다 채움
for (let i = 65; i < 91; i++) { //아스키코드를 확인하기 위한 i
for (let j = 0; j < input.length; j++) { //input의 배열을 순회하기 위한 j
if (i === input[j].charCodeAt(0)) { //i와 input의 요소의 아스키코드가 같다면?
Arr[i - 65] += 1;
//같다면 Arr배열에 넣는데, Arr배열을 0부터 25까지 밖에 없음
//즉, (아스키코드 - 65)를해야 배열에 잘 넣을 수 있음
}
}
}
input안에 있는 철자들이 아스크코드와 맞는지 확인 후 맞다면 1을 더해준다.
let count = 0;
let maxNum = Math.max(...Arr);
//Max.max는 배열을 그대로 넣을 수 없어 스프레드 연산자를 이요해서 넣어야 작동된다. 아니면 apply이용
Arr.map((elem) => {
if (elem === maxNum) count++;
});
Arr의 배열을 순회해 count를 더한다.
count는 중복수를 알아보기 위한 변수
count === 1
? console.log(String.fromCharCode(Arr.indexOf(maxNum) + 65))
: console.log("?");
count값이 1이라면 숫자를 알파벳으로 변환(아스키코드이용String.fromCharCode()
)
count값이 1보다 크다면 -> 중복된 값이 있다는 뜻이므로, "?"를 출력한다.
toUpperCase()
String.fromCharCode()
Math.max(...Array)
https://onelight-stay.tistory.com/368
https://gurtn.tistory.com/49