728x90
https://www.acmicpc.net/problem/1157
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
나의 풀이
간단하게 문자열을 구현하는 문제지만 고민을 많이 하게된 문제
문자를 배열로 풀어서 for문을 두번 돌려 비교하는건 너무 비효율적인거 같아
다른 방법을 생각하다 객체로 만들어 풀어보기로 했다.
1. 결과값은 대문자로 출력 해주어야 하니 입력받은 단어를 모두 대문자로 치환
2. 빈 객체 선언한 뒤, 단어별로 갯수 추가
3. for...in 문으로 최대값, 최대값의 알파벳 할당
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().toUpperCase();
let words = {};
for (let i = 0; i < input.length; i++) {
if (input[i] in words) {
words[input[i]] += 1;
} else {
words[input[i]] = 1;
}
}
let max = 0;
let maxChar = "";
for (let word in words) {
if (max < words[word]) {
max = words[word];
maxChar = word;
} else if (max === words[word]) {
maxChar = "?";
}
}
console.log(maxChar);
다른 사람 풀이
let input = require('fs').readFileSync('/dev/stdin').toString().toLowerCase();
const result = new Array(26).fill(0);
for (let i = 0; i < input.length; i++) {
result[input.charCodeAt(i) - 97] ++;
}
const max = Math.max(...result);
const index = result.indexOf(max);
let isSame = false;
for (let j = 0; j < 26; j++) {
if (result[j] === max && index != j) {
isSame = true;
break;
}
}
console.log(isSame ? "?" : String.fromCharCode(index + 65));
아.. 아스키코드를 생각 못했다..
Reference
728x90
'ETC > 📋 Coding Tests' 카테고리의 다른 글
[프로그래머스/JS] 가장 큰 수 :: 배열 (0) | 2024.01.02 |
---|---|
[백준/node.js] 15552번 빠른 A+B :: 시간초과 (0) | 2023.11.29 |
[백준/node.js] fs 모듈 런타임 에러 (0) | 2023.11.28 |
Node.js로 백준(BOJ) 문제풀기 (0) | 2023.11.23 |
주니어 개발자의 코알못 탈출기 🏃🏻♂️ (2) | 2023.11.23 |