백준 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) 줄의 처음과 끝에 공백을 출력하진 않았는가?

 

이 문제는 공백과 줄바꿈을 구별하는 스페셜 저지 문제이기 때문에 공백의 위치를 계속 신경써주면서 문제를 풀어야 한다.