백준 6581 - HTML (Python)
2024. 1. 29. 05:15ㆍ알고리즘
문제
https://www.acmicpc.net/problem/6581
6581번: HTML
원래의 HTML 문서가 입력으로 주어진다. 이 텍스트는 단어와 HTML 태그들로 이루어져 있으며, 태그는 한 개 이상의 공백문자나 탭, 개행 문자 등으로 구분된다. 단어는 연속된 알파벳, 숫자, 또는
www.acmicpc.net
풀이
import sys
txt = []
for line in sys.stdin:
txt += line.split()
count = 0
for t in txt:
if t == "<br>":
print()
count = 0
elif t == "<hr>":
if count !=0:
print()
print("-"*80)
count = 0
else:
if count+len(t)+1 > 80: #한칸 띄우기 때문에 +1
print()
count = 0
elif count > 0: #줄의 첫부분에서는 공백을 출력하지 않아야 함
print(end=" ")
count += 1
print(t,end="")
count += len(t)
문자열을 처리하는 문제이다
EOF 판단이 포함된 문제인데 파이썬에서는 sys.stdin을 이용하면 된다.
(try-catch문을 이용한 방법도 있지만 사용하지 않았다)
#sys.stdin을 활용한 EOF 판단 구현
import sys
for line in sys.stdin:
print(line)
#Try-Catch문을 활용한 EOF판단 구현
while True:
try:
txt = input()
print(txt)
except EOFError:
break
받아온 문장을 split() 으로 분리하여 txt에 담아주었다.
문제에서 `여러 개의 연속된 개행 문자, 공백 문자, 탭 문자는 하나의 공백문자로 출력한다.` 라는 말이 있는데 split을 이용하면 해당 부분을 자동으로 해결할 수 있다.
처음 문제를 풀 떄 놓쳤던 부분이 두군데가 있다.
1) 현재 줄이 80자를 넘어가는지 검사하기 위해 글자 수를 셀 때 공백까지 포함하는가?
2) 줄의 처음과 끝에 공백을 출력하진 않았는가?
이 문제는 공백과 줄바꿈을 구별하는 스페셜 저지 문제이기 때문에 공백의 위치를 계속 신경써주면서 문제를 풀어야 한다.