728x90
반응형
[백준] 1157번 - 단어 공부 (node.js)
단계별 코딩테스트를 한지 어느덧 심화1을 풀게 되었습니다.
몇번정도 블로그에 올릴가 고민했었지만 이번을 시작으로 복잡하거나 이런 방법도 있었구나
혹은 이런 패턴은 기억해두는게 좋겠다 하는 답안들은 블로그에 올리려고 합니다.
제가 작업한 것도 있지만 다른 사람들이 작업한 것중 더 효율적이거나 가독성이 좋은걸로 가져왔습니다.
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오.
단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다.
주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다.
단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
1. 가독성이 좋은것
const fs = require("fs");
const str = fs.readFileSync("input.txt").toString().trim().toUpperCase();
// 알파벳 갯수의 빈 배열을 만든다.
cost alphabetArr = Array(26).fill(0);
// str(문제로 받은 문자)와 동일한 알파펫이 해당하는 idx에 갯수를 채워준다.
// 대문자 알파벳의 코드는 65부터 시작하니가 배열의 index에 맞추기 위해 -65
for (const d of str) {
const idx = d.charCodeAt();
alphabetArr[idx - 65]++;
}
// 알파벳 배열에 채운 숫자중 가장 큰 숫자를 가져오고,
// 그 숫자와 동일한 다른 값이 배열에 존재하는지 확인
const max = Math.max(...alphbetArr);
const maxArr = alphabet.filter(d => d === max);
// 존재 확인되면 바로 콘솔에 ? 호출
if (maxArr.length > 1) {
console.log('?');
} else {
// 그게 아닐 시에 제일 컸던 값의 인덱스 값을 가져오고
// 배열에 맞춰주기 위해 뺐던 65값을 다시 체우고 해당 알파벳을 찾아준다.
const idx = alphabetArr.indexOf(max);
String.fromCharCode(idx + 65);
}
2. 신기했던 것
const fs = require('fs')
const str = readFileSync('/dev/stdin').toString().trim().toUpperCase();
// 처음부터 바로 문제로 받은 문자를 배열화 시키고, reduce로 알파벳 : 알파벳 갯수의 객체로 만들어버림
const reducedObj = str.split('').reduce((acc, cur) => {
acc[cur] ? acc[cur] += 1 : acc[cur] = 1;
return acc;
}, {});
// 만든 객체를 배열화 시켜서 크기 비교를 해서 순서대로 나열
const sortedArr = Object.entries(reducedObj).sort(([, a], [, b]) => b - a);
// 순대로 나열한 것일 때 값이 두개이상이면서 제일 앞자리, 그다음자리의 값이 같으면 제일
// 큰 값이 2개 이상임으로 ? 호출, 그게 아니면 제일 앞자리 값 호출
console.log(sorted.length !== 1 && sorted[0][1] === sorted[1][1] ? '?' : sorted[0][0]);
전 set함수 쓰고, regExp 사용하고 복잡하게 한거같은데
오히려 힘빼고 편하게 생각하는게 좋을때가 많은 것 같다.
이런 경우를 많이 풀어보고 눈에 익히는게 중요한것 같다.
중고신입 취준생들 모두 화이팅!
참조!
https://www.acmicpc.net/source/75049621
https://mywebproject.tistory.com/m/468
728x90
반응형
'코딩 테스트' 카테고리의 다른 글
[백준] 2292번 - 벌집 (node.js) (1) | 2024.04.25 |
---|---|
[백준] 2903번 - 중앙 이동 알고리즘 (node.js) (0) | 2024.04.23 |
[백준] 2563번 - 색종이 (node.js) (0) | 2024.04.23 |
[백준] 1316번 - 그룹 단어 체커 (node.js) (0) | 2024.04.18 |
[백준] 2444번 - 별 찍기 - 7 (node.js) (0) | 2024.04.17 |
댓글