본문 바로가기

백준9324 - 진짜메시지 JS 본문

개발/algorithm

백준9324 - 진짜메시지 JS

자전하는명왕성 2023. 9. 22. 09:38

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

해당 문제는 주어진 텍스트가 조건에 맞는지 판별하는 문제다.

 

문제 설명이 조금 미흡한데, '각 문자가 세 번째 등장할 때'가 아니라

'각 문자가 3의 배수로 등장할 때마다'를 적용하고 풀어야 문제가 해결된다.

 

문제를 해결한 방식은 다음과 같다.

예제로 주어진 문자열인 'AABA'를 예시를 들면, 조건에 맞게끔 'AABAA'를 만든 뒤 비교해주고

두 문자열이 일치하면 OK, 그렇지 않을 시 FAKE를 반환하도록 했다.

 

이는 구현이 간단한 편인데, 먼저 각 문자가 등장한 횟수를 담을 객체, 비교를 위한 문자열 변수를 하나 선언한다.

이후 각 문자가 등장할 때마다 해당 객체에 추가한다.

반복문을 진행하며 만약 해당 문자열 등장 횟수가 3의 배수일 경우,

비교를 위해 선언한 문자열에 추가한 뒤 인덱스를 증가시켜 다음 순서를 통과하도록 한다. 

(이러한 방법으로 각 문자가 3의 배수로 등장할 때마다 제대로 추가되었는지 확인할 수 있다.)

 

소스 코드

const fs = require('fs')
const input = fs.readFileSync(process.platform === "linux" ? "/dev/stdin":"입력.txt")
  .toString().trim().split('\n')

  const act = (str) => {
    const table = {}
    let temp = ''
    
    for(let i = 0 ; i < str.length ; i++) {
      table[str[i]] = (table[str[i]] || 0) + 1
      temp += str[i]
      if(table[str[i]] % 3 === 0) {
        temp += str[i]
        i ++
      }
    }

    return str === temp ? 'OK' : 'FAKE'
  }

  function solution(data) {
    data.shift()

    const result = data.map(el => act(el))
    console.log(result.join('\n'))
  }

  solution(input)

 

'개발 > algorithm' 카테고리의 다른 글

백준1158 - 요세푸스 문제 (queue) JS  (0) 2023.09.24
백준2292 - 벌집 JS  (0) 2023.09.23
백준1063 - 킹 JS  (1) 2023.09.21
백준3107 - IPv6 JS  (0) 2023.09.20
백준3036 - 링 (유클리드 호제법) JS  (0) 2023.09.19
Comments