https://www.acmicpc.net/problem/17413
1. 문제 설명
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
- 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
- 문자열의 시작과 끝은 공백이 아니다.
- '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
2. 입출력
3. 문제 풀이
const [input] = require("fs")
.readFileSync("./input.txt")
.toString()
.trim()
.split(/\r\n/);
//const [input] = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\n/);
function solution(input) {
const answer = [];
// 1) "<문자>"를 그룹화하여 패턴을 포함해 자른다.
input = input.split(/(<[^>]*>)/);
input.forEach((item) => {
// 2) "<"로 시작하면 그대로 answer에 담는다.
if (item[0] === "<") {
answer.push(item);
} else {
// 3) 아닐 경우 띄어쓰기 기준으로 잘라 단어를 뒤집는다.
item.split(/( )/).forEach((str) => {
// 4) 뒤집은 단어를 문자열로 바꿔 answer에 담는다.
answer.push(str.split("").reverse().join(""));
});
}
});
// answer를 문자열로 변환한다.
console.log(answer.join(""));
}
solution(input);
반응형
'Algorithm' 카테고리의 다른 글
[백준 / NodeJS] 17298번 오큰수 (0) | 2023.04.09 |
---|---|
[백준 / NodeJS] 10799번 쇠막대기 (0) | 2023.04.05 |
[백준 / NodeJS] 10866번 덱 (0) | 2023.04.03 |
[백준 / NodeJS] 1158번 요세푸스 (0) | 2023.04.02 |
[백준 / NodeJS] 10845번 큐 (0) | 2023.03.31 |