[백준/node.js] 2941번 크로아티아 알파벳

문제

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

입력

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

출력

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

예제 입/출력

ljes=njak / 6
ddz=z= / 3
nljj / 3
c=c= / 2
dz=ak / 3

풀이

const fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

input = input[0];

solution(input)

function solution(str) {

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

        for (let alphabet of croatia) {
          str = str.split(alphabet).join("Q"); //이 부분이 가장 핵심.
        }
    /* for문 안에서 str이 어떻게 변하는지의 과정.
    ljes=njak
	ljes=njak
	ljes=njak
	ljes=njak
	Qes=njak
	Qes=Qak
	QeQQak
	QeQQak
   */
        console.log(str.length)
}

느낀점

혼자 풀 때, 굉장히 하드코딩을 했다.
이 문제에서 croatia 문자를 가지는 배열을 만들고, croatia 배열의 element들을 기준으로
split() 메소드를 쓸 수 있다는 것을 몰랐기 때문이다.
str이 'ljes=njak' 이면 split().join(Q)를 하고 난 후에는 'QeQQak'로 바뀐다.
이 부분이 가장 핵심인 방법이다.

str = str.split(alphabet).join("Q"); 이부분에서 split() 까지만 하면 TypeError: input.split is not a function 이라는 에러가 뜬다. join() 까지 같이 써주어야 한다.

  • 어떤한 배열의 요소를 이용하여 split() 메소드를 쓸 수 있다는 점.
  • 하지만 split()까지만 쓰면 에러가 난다는 점.
  • 그러므로 split() 메소드를 쓴다고 해서 배열이 만들어지는게 아니라는 점.
  • split()과 join() 메소드를 함께 써야하고
  • 배열의 요소가 발견 됫을 시 바꾸어줄 문자를 join(여기)에 넣어주어야 한다는 점.

새로운, 유용한 스킬? 을 배워간 문제인거 같다.
알고리즘을 풀면 항상 느끼는 거지만 정말 고수들이 많다.. ㅎ;;
그리고 내가 모르는 것도 너무 많다 ㅎ..;;

좋은 웹페이지 즐겨찾기