백준9324 - 진짜메시지 JS 본문
반응형
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