๋ฌธ์
๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง - 5076๋ฒ
ํ์ด ๊ณผ์
HTML
๋ฌธ์์ด์ ์
๋ ฅ์ผ๋ก ๋ฐ์์ ํด๋น ๋ฌธ์์ด์ด ์ ํจํ์ง ํ๋จํ๋ ๋ฌธ์ ์
๋๋ค.
์ด๋ฆฐ ํ๊ทธ์ ๋ซํ ํ๊ทธ๋ ์๋ก ์์ ์ด๋ฃจ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ (self-closing ํ๊ทธ ์ ์ธ) ์คํ
์ ์ด์ฉํด์ ์ ํจ์ฑ์ ํ๋จํ๋ฉด ๋ฉ๋๋ค.
์ด๋ ์ฃผ์ด์ง ๋ฌธ์์ด์์ ํ๊ทธ๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ํ์ฑํ๋ ํจ์๋ฅผ ๊ตฌํํฉ๋๋ค.
ํ๊ทธ ์ ๋ณด๋ ํ๊ทธ ์ด๋ฆ, ํ๊ทธ ํ์
์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ฝ๋
import sys
def parse_tag(html):
parsed_tags = []
start_parsing = False
tag_name = ''
tag_type = ''
for idx in range(len(html)):
if html[idx] == '<':
tag_type = 'open' if html[idx + 1] != '/' else 'close'
start_parsing = True
elif html[idx] == '>':
tag_type = 'self-closing' if html[idx - 1] == '/' else tag_type
parsed_tags.append({'tag_type': tag_type, 'tag_name': tag_name })
tag_type = ''
tag_name = ''
start_parsing = False
else:
if start_parsing and html[idx] != ' ':
if html[idx] != '/':
tag_name += html[idx]
else:
start_parsing = False
return parsed_tags
def solution(html):
tag_stack = []
tags = parse_tag(html)
for tag in tags:
if tag['tag_type'] == 'self-closing':
continue
elif tag['tag_type'] == 'close':
if not tag_stack:
return 'illegal'
top_tag = tag_stack[-1]
if top_tag['tag_type'] != 'open' or top_tag['tag_name'] != tag['tag_name']:
return 'illegal'
tag_stack.pop()
else:
tag_stack.append(tag)
return 'legal' if not tag_stack else 'illegal'
if __name__ == '__main__':
while True:
question = sys.stdin.readline().strip()
if question == '#':
break
answer = solution(question)
print(answer)
๋ฐ์ํ
'๐ algorithm > boj' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 9094 - ์ํ์ ํธ๊ธฐ์ฌ (0) | 2021.09.12 |
---|---|
BOJ 1920 - ์ ์ฐพ๊ธฐ (0) | 2021.07.05 |
BOJ 13700 - ์์ ๋ฒ์ฃ (0) | 2021.06.29 |
BOJ 14950 - ์ ๋ณต์ (0) | 2021.06.25 |
BOJ 1197 - ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2021.06.18 |
๐ฌ ๋๊ธ