반응형
오로지 <br>, <hr> 태그와 그 외 평문으로만 주어지는 HTML 문서가 있을 때, 그 결과를 보여주는 코드를 작성하시오.
한 줄에는 80자보다 많은 글자가 출력되어서는 안 된다.
https://www.acmicpc.net/problem/6581
정답 뜨자마자 정리하는 따끈한 글!
해당 문제는 입력으로 HTML 코드가 들어오면 파싱해서 결과를 출력해주면 되는 문제이다.
단, 조건이 있는데
- 한 줄에는 80자 이상을 출력할 수 없고 80줄이 넘으면 줄바꿈 후 출력한다.
- <br> 태그가 주어지면 줄바꿈을 한다.
- <hr> 태그가 주어지면 줄바꿈 후 라면 - 문자 80개를 출력하고 아니라면 줄바꿈 후 출력한다.
위 조건에 맞게 구현을 해주면 된다.
처음 접근 방식은 vector<string>에 \n (newline) 기호를 넣어주고 출력해보면 되지 않을까 싶었는데 된다.
vector<string>에 단어와 공백 한칸을 (예로 들면 apple ) 넣어주었고 입력받은 길이를 임시로 저장해주었다. 길이가 80줄이 넘어가면 줄바꿈을 해준다.
<br> 태그이면 줄바꿈을 해주고 <hr> 태그일 때 이전 입력이 줄바꿈이면 따로 줄바꿈을 해주지 않고 - 80개를 출력한다. (줄바꿈이 아니였다면 줄바꿈을 해주고 출력한다.)
입력을 다 받으면 vector<string>에 저장한 내용을 출력해주면 된다.
그대로 구현해보자! (생각없이 해서 코드가 더러워보인다)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string word;
vector<string> html;
int input_len = 0;
while(cin >> word) {
if(input_len + word.length() > 80) {
html.push_back("\n");
input_len = 0;
}
if(word == "<hr>") {
input_len = 0;
if(html[html.size() - 1] == "\n") {
html.push_back("--------------------------------------------------------------------------------");
} else {
html.push_back("\n--------------------------------------------------------------------------------");
}
html.push_back("\n");
} else if(word == "<br>") {
input_len = 0;
html.push_back("\n");
} else {
html.push_back(word);
html.push_back(" ");
input_len += (word.length() + 1);
}
}
for(int i = 0; i < html.size(); i++) {
cout << html[i];
}
return 0;
}
반응형
'개발 > ProblemSolving' 카테고리의 다른 글
백준 #8979 올림픽 (0) | 2020.03.13 |
---|---|
백준 #2688 줄어들지 않아 (0) | 2020.03.12 |
최대공약수와 최소공배수 (0) | 2019.12.22 |