흙금이네 블로그

[BOJ] 22859 - HTML 파싱 (Python, JavaScript) 본문

알고리즘

[BOJ] 22859 - HTML 파싱 (Python, JavaScript)

흙금 2023. 1. 20. 23:41

 

 

아이디어

 

정규 표현식에 따라 문자열을 처리해준다.

 

 

풀이 #1 (Python)

 

re 모듈의 sub 함수를 이용하여 입력 받은 문자열을 조건에 맞게 파싱하고, 그 결과를 출력한다.

 

import re

li = [(r'</?main>', ''), (r'<div title="', 'title : '),
      (r'">', '\n'), (r'<[^p>]*>', ''),
      (r'<[a-zA-Z0-9 ]+[a-zA-Z0-9 ]+>', ''),
      (r'</[a-zA-Z0-9 ]+[a-zA-Z0-9 ]+>', ''),
      (r'<p> *', ''), (r' *</p>', '\n'), (r' {2,}', ' '), (r'\n+$', '')]

HTML = input()
for p, s in li:
    HTML = re.sub(p, s, HTML)
print(HTML)

 

 

 

풀이 #2 (JavaScript)

 

풀이 #1 코드와 마찬가지로 자바스크립트의 정규 표현식에 맞게 코드를 작성한다.

 

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString();

const list = [[/<\/?main>/g, ''], [/<div title="/g, 'title : '],
              [/">/g, '\n'], [/<[^p>]*>/g, ''],
              [/<[a-zA-Z0-9 ]+[a-zA-Z0-9 ]+>/g, ''],
              [/<\/[a-zA-Z0-9 ]+[a-zA-Z0-9 ]+>/g, ''],
              [/<p> */g, ''], [/ *<\/p>/g, '\n'], [/ {2,}/g, ' '], [/\n+$/, '']];

let HTML = input;
for (let li of list) {
    HTML = HTML.replace(li[0], li[1]);
}
console.log(HTML);

 

Comments