🚩 문제 설명
https://www.acmicpc.net/problem/17413
⏱️ 시간 복잡도
▪ 주어진 문자열의 길이는 S이다.
▪ 문자열 하나하나 당 따져보므로 따라서 O(S) 라고 할 수 있다.
◾ 문장들이 주어질 때 각 문장의 단어만을 거꾸로 뒤집어 출력하는 문제
◾ 몇가지의 규칙을 지켜야 한다.
- 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
- 문자열의 시작과 끝은 공백이 아니다.
- '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
◾ <>로 이루어져 있는 태그 안에 있는 단어는 뒤집으면 안된다.
✅ 입출력
return ➡️ 주어진 문자의 각 단어를 뒤집어서 출력한다. (<>태그 안 단어 제외)
✔️ 예제 1
baekjoon online judge
noojkeab enilno egduj
✔️ 예제 2
<open>tag<close>
<open>gat<close>
✔️ 예제 3
<ab cd>ef gh<ij kl>
<ab cd>fe hg<ij kl>
✔️ 예제 4
< space >space space space< spa c e>
< space >ecaps ecaps ecaps< spa c e>
📑 문제 풀이
with 파이썬 (Python)
import sys
sts = sys.stdin.readline().strip() # 주어지는 문장
sts += '\n'
notTags = [] # 태그가 아닌 단어
tags = [] # 태그들
for s in sts:
if s == '<':
if notTags:
print(''.join(reversed(notTags)), end='')
notTags = []
tags.append(s)
elif '<' in tags:
tags.append(s)
if s == '>':
print(''.join(tags), end='')
tags = []
else:
if s == ' ' or s == '\n':
print(''.join(reversed(notTags)), end=' ')
notTags = []
else:
notTags.append(s)
💬 Point
➡️ 배열 2개 사용 : tags, notTags
➡️ ''.join(reversed(문자열))
➡️ stack 사용
➡️ \n 문장 끝에 추가
◾ sys.stdin.readline().strip()으로 문장을 받는다.
◾ 받은 문장에 '\n' 문자를 붙여준다.
- 마지막 단어를 뒤집기 위해서 붙여준다.
- 'ab cd ed' 이렇게 있을 때
- 로직상 공백을 만나면 뒤집게 되어 있음.
- 근데 ed 같은 경우는 뒤에 공백이 없다.
- 그래서 \n 문자를 붙여서 \n을 만나면 뒤집도록 한다.
◾ 경우를 크게 3가지로 나눈다.
- 문자가 < 인 경우
- 만약 여기서 notTags 안에 문자가 있다면 새 태그가 시작된 것이니 notTags 안에 들어있는 문자들을 다 꺼내준다.
- 태그 배열 안에 <가 들어가 있는 경우
- 태그 안 문자들이 시작되는 것이다.
- 따라서 만약에 문자가 > 라면 tags 안 문자들을 다 꺼내준다.
- 둘 다 아닌 경우
- notTags 문자열들을 이른다.
- 만약 공백을 만나거나 \n 문자를 만나면 notTags 문자들을 거꾸로 이어붙인다.
➕ 참고
https://yeomss.tistory.com/102?category=985840
# 코드플러스 단어 뒤집기 2 파이썬
# 백준 17413 파이썬
# 백준 단어 뒤집기2 파이썬
728x90
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글
[자료구조(연습)] [BJ10799] 쇠막대기 (0) | 2021.11.28 |
---|---|
[자료구조(연습)] [BJ17298] 오큰수 (0) | 2021.11.25 |
[자료구조] [BJ10866] 덱 (0) | 2021.11.25 |
[자료구조] [BJ1158] 요세푸스 문제 (0) | 2021.11.24 |
[자료구조] [BJ10845] 큐 (0) | 2021.11.24 |