📌 문제 링크
https://www.acmicpc.net/problem/1157
📌 문제 탐색하기
- 알파벳 대소문자 단어가 주어지면 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 출력
- 여러 개가 존재하는 경우 `?`를 출력
시간복잡도
- O(n)
📌 코드 설계하기
- 입력값을 모두 대문자로 변경합니다.
- 대문자로 변경한 배열을 순회돌며 `Map` 객체에 key - value 형태로 각 알파벳과 개수를 저장합니다.
- 가장 많이 나온 알파벳의 개수를 최대값으로 하고 동일한 최대값이 있으면 `-1`을 출력, 아니면 가장 많이 나온 알파벳을 출력합니다.
📌 정답 코드
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input0.txt";
const input = fs.readFileSync(filePath).toString().trim().split("");
const upperStr = input.map((x: string) => x.toUpperCase());
const map = new Map();
for (const x of upperStr) {
map.set(x, (map.get(x) ?? 0) + 1);
}
const max = Math.max(...map.values());
const findWord = () => {
let count = 0;
let answer = "";
for (const [k, v] of map) {
if (max === v) {
count++;
if (count > 1) {
return "?";
}
answer = k;
}
}
return answer;
};
console.log(findWord());
'코딩 > 알고리즘' 카테고리의 다른 글
백준) 10773 - 제로 JS (0) | 2024.11.27 |
---|---|
백준) 1816 - 암호키 JS (0) | 2024.11.26 |
백준) 2417 - 정수 제곱근 JS (0) | 2024.11.24 |
백준) 1920 - 수 찾기 JS (0) | 2024.11.23 |
백준) 1904 - 01타일 JS (0) | 2024.11.22 |