티스토리 뷰
728x90
문제 링크
https://www.acmicpc.net/problem/4828
풀이
죽여..줘...
정답 코드
const fs = require('fs');
const stdin = fs.readFileSync('/dev/stdin').toString().split('\n');
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
const main = function () {
let s, ans = [];
let n = stdin.length;
const valid = () => ans.push(`valid\n`),
invalid = () => ans.push(`invalid\n`);
const inner = str => [Number(str[0] !== '<'), str.substr(1, str.length - 2)];
const last = str => str[str.length - 1];
const regex = /<{1}[0-9a-z]+>|<{1}\/[0-9a-z]+>|<{1}[0-9a-z]+\/>|&{1}x([0-9A-Fa-f][0-9A-Fa-f])+;|<|>|&/g
while (--n) {
s = input();
const asciiFlag = s.split('').reduce((flag, c) => {
const ascii = c.charCodeAt(0);
return flag && (32 <= ascii && ascii <= 127);
}, true);
if (!asciiFlag) {
invalid();
continue;
}
let plain = s.split(regex),
rest = s.match(regex);
if (plain) {
const isValid = plain
.filter(Boolean)
.reduce((flag, str) => flag && (str.search(/[<>&]/) === -1), true);
if (!isValid) {
invalid();
continue;
}
}
if (rest) {
const context = [];
Object.assign(context, {
empty() {
return this.length === 0;
},
back() {
return this[this.length - 1];
},
});
let isValid = true;
rest
.filter(Boolean)
.map(inner)
.forEach(([type, str]) => {
if (type === 0) {
// tag
if (last(str) === '/') return;
if (str[0] !== '/') {
context.push(str);
} else {
if (context.empty() || context.back() !== str.substr(1)) {
isValid = false;
return;
}
context.pop();
}
} else {
if (str[0] !== 'x' && !['lt', 'gt', 'amp'].includes(str)) {
isValid = false;
}
}
});
if (!context.empty()) {
isValid = false;
}
if (!isValid) {
invalid();
continue;
}
}
valid();
}
console.log(ans.join(''));
};
main();
728x90
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[BOJ] 백준 22983 - 조각 체스판 (SUAPC 2021 Summer) (0) | 2021.09.12 |
---|---|
[BOJ] 백준 22991 - 수요응답형 버스 (SUAPC 2021 Summer) (0) | 2021.09.12 |
[프로그래머스] 시험장 나누기 (Javascript, 2021 카카오 채용연계형 인턴십) (1) | 2021.07.12 |
[프로그래머스] 미로 탈출 (2021 카카오 채용연계형 인턴십) (3) | 2021.07.12 |
[프로그래머스] 표 편집 (Javascript, 2021 카카오 채용연계형 인턴십) (1) | 2021.07.12 |
댓글