[JavaScript] 1157 | 백준 (toUpperCase)

유인학·2022년 5월 23일
0

[JS] Algorithm(백준)

목록 보기
50/82
post-thumbnail

📄 문제

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

⌨ 예제 입력 1

Mississipi

📺 예제 출력 1

?

⌨ 예제 입력 2

baaa

📺 예제 출력 2

A

🚩solution

일단 대소문자 구분을 안하고 출력이 대문자이니 처음부터 대문자로 전부 바꾸어주자.

const sentence = 'Mississipi';
console.log(sentence.toUpperCase());
// expected output: "MISSISSIPI"

그리고 각 알파벳이 몇개인지 카운트해주는 배열을 만들어주자.

let arr = new Array(26);
arr.fill(0);

카운트가 다 끝나면 max(최댓값)을 구해주자.

let max = 0;
arr.map((value) => (value > max ? (max = value) : null));

그리고 답을 먼저 구해주자.
(여기서는 최댓값이 중복되는 알파벳이 있어도 상관없다 나중에 걸러내기 때문)

let ans = String.fromCharCode(arr.indexOf(max) + 65);
//fromCharCode(value)는 charCodeAt(value)의 반대개념

그리고 arr를 내림차순 해주고 배열 첫번째 값과 두번째 값이 같으면
최대가 중복되니까 '?'를 출력해주자
그게 아니면 ans값을 출력해 주면 된다.

const input = require('fs')
  .readFileSync('/dev/stdin')
  .toString()
  .trim()
  .toUpperCase();
let arr = new Array(26);
arr.fill(0);
input.split('').map((value) => arr[value.charCodeAt(0) - 65]++);
let max = 0;
arr.map((value) => (value > max ? (max = value) : null));
let ans = String.fromCharCode(arr.indexOf(max) + 65);
arr.sort((a, b) => {
  return b - a;
});
if (arr[0] === arr[1]) {
  console.log('?');
} else {
  console.log(ans);
}

[문자열 대문자로]
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase

profile
'유'발자!

0개의 댓글