본문 바로가기

백준/JavaScript

[JS] 백준 심화 1 - 세 번째 이야기

728x90

 

 

졸리다... 더 졸려지기 전에 오늘 문제를 다 풀어버려야겠다.

 

 

문제 1157번

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

음.... 이건 다른 풀이를 참고하여 풀어야 할 것 같다.

 

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require('fs').readFileSync(readFileSyncAdress).toString().trim();

//모두 대문자로 변환
const newinput = input.toUpperCase();

//알파벳 개수만큼의 원수 개수를 가진 배열 생성(다 0으로 초기화)
const count = new Array(26).fill(0);

//i번째 문자열을 아스키코드로 변환(대문자로 변환했기에 A인 65를 빼줘야 0이 됨)
for(let i=0;i<input.length;i++){
    count[newinput.charCodeAt(i)-65]++;
}

//가장 많은 알파벳의 수와 인덱스 찾기
const max = Math.max(...count);
const index = count.indexOf(max);

//중복확인
let same = false;
//가장 큰 수인데 그 수가 인덱스와 다르면 중복이 있다는 뜻이니 true로 변경
for(let i=0;i<26;i++){
    if(count[i]===max && i!=index){
        same = true;
        break;
    }
}

//same이 true면 ?, false면 해당 인덱스에 65를 더해서 출력(대문자)
console.log(same ? '?':String.fromCharCode(index+65));

 

 

처음에 봤을 때는 너무 복잡한 것 같았는데 공부해보니 괜찮았던 것 같다.

마지막에는 왜 count에 해당 인덱스를 넣어서 출력하지 않는지 의문이 들었는데, 처음에 65를 뺐으니까 65를 더해서 그 숫자에 해당되는 문자를 출력해 주는 것 같다.

 

[참고] https://velog.io/@rkio/%EB%B0%B1%EC%A4%80-Javascript-1157

 

 

 

 

문제 2941번

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

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

 

문제를 보니 크로아티아 알파벳들을 배열에 저장하고 입력값과 비교해 주면 될 것 같다.

그런데 어떤 식으로 비교해 주고 개수를 카운트해줘야 하는지 모르겠다...

 

찾아보니 어떤 분이 백준에서 공개된 답안을 정리한 것을 보았다.

정말 간단한 풀이였다. 그래서 코드를 분석해 보고 내가 따로 작성해 보았다.

 

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim();

let croatia = ["c=","c-","dz=","d-","lj","nj","s=","z="];

function solution(input){
    for(let i of croatia){
        input = input.split(i).join('Q');
    }
    return input.length;
}

console.log(solution(input));

 

 

 

크로아티아 알파벳들을 배열에 저장해 두고 solution이라는 함수를 만들었다. solution 함수는 크로아티아 알파벳이 담긴 croatia 배열을 한 번씩 돌아가면서 입력값을 croatia를 기준으로 나누고, 그 부분을 Q로 변경해 주었다. 그리고 크로아티아 알파벳이 Q로 변경된 input 배열의 길이를 반환해 준다.

 

 

[참고] https://velog.io/@dragoocho/%EB%B0%B1%EC%A4%80-2941%EB%B2%88-Node.js-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4

 

 

 

 

 

 

 

 

이렇게 하니까 이해는 가지만, 나중에 다시 풀려고 하면 기억이 안 날 것 같다.

그래서 다음에 다시 한번 풀어봐야겠다.

 

 

728x90