본문 바로가기

코딩/알고리즘

백준) 1157 - 단어 공부 JS

📌 문제 링크

https://www.acmicpc.net/problem/1157


📌 문제 탐색하기

  • 알파벳 대소문자 단어가 주어지면 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 출력
  • 여러 개가 존재하는 경우 `?`를 출력

시간복잡도

  • O(n)

📌 코드 설계하기

  1. 입력값을 모두 대문자로 변경합니다.
  2. 대문자로 변경한 배열을 순회돌며 `Map` 객체에 key - value 형태로 각 알파벳과 개수를 저장합니다.
  3. 가장 많이 나온 알파벳의 개수를 최대값으로 하고 동일한 최대값이 있으면 `-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