[백준] 2941번 크로아티아 알파벳

yoon Y·2022년 4월 18일
0

알고리즘 문풀

목록 보기
5/6

문제 링크

첫번째 시도

변경된 문자를 크로아티아 문자로 바꾼다.
그 후 크로아티아 문자중 갯수가 2개인 문자열이 있으면 '1'로 바꾸고
최종적으로 변환된 문자열의 갯수를 반환한다.

const solution = () => {
  let str =  input[0].replace(/(\s*)/g, "")
  const croatia = {
    'c=': 'č',
    'c-': 'ć',
    'dz=': 'dž',
    'd-': 'đ',
    's=': 'š',
    'z=': 'ž'
  }
  const twoLength = ['dž', 'lj', 'nj']

  Object.entries(croatia).map(([key, value]) => {
    const arr = str.split(key);
    str = arr.join(value)
  })

  twoLength.map((v)=> {
    const arr = str.split(v);
    str = arr.join('1') 
  })  

  console.log(str.length)
}
solution()
  • replace를 사용할 경우 정규식을 사용하지 않으면 가장 처음 것만 대체된다.
    그렇기에 split과 join을 사용해 해당하는 모든 문자열을 대체해야한다.
  • 문자열 문제는 공백을 고려해야한다.

다른 사람 풀이

const fs = require("fs");
const input = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `ljes=njak`
).trim();

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

function solution(input) {
  for (let alphabet of croatia) {
    input = input.split(alphabet).join("Q");
  }

  return input.length; // return input일 경우 QeQQak를 반환한다.
}

console.log(solution(input));

배운점

생각해보면 크로아티아 문자를 한 개로만 처리하면 됐다.
나는 굳이 크로아티아 문자로 변경한 후에 2글자인 문자만 1개로 변경해서 의미없는 연산을 했다..
또 문제에 국한해서 편협적으로 생각한 것 같다.

profile
#프론트엔드

0개의 댓글