[자료구조(연습)] [BJ17413] 단어 뒤집기 2
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/백준 알고리즘

[자료구조(연습)] [BJ17413] 단어 뒤집기 2

코드 플러스

🚩 문제 설명

https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

BJ17413

⏱️ 시간 복잡도
▪ 주어진 문자열의 길이는 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가지로 나눈다.

  1. 문자가 < 인 경우
    • 만약 여기서 notTags 안에 문자가 있다면 새 태그가 시작된 것이니 notTags 안에 들어있는 문자들을 다 꺼내준다.
  2. 태그 배열 안에 <가 들어가 있는 경우
    • 태그 안 문자들이 시작되는 것이다.
    • 따라서 만약에 문자가 > 라면 tags 안 문자들을 다 꺼내준다.
  3. 둘 다 아닌 경우
    • notTags 문자열들을 이른다.
    • 만약 공백을 만나거나 \n 문자를 만나면 notTags 문자들을 거꾸로 이어붙인다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고

https://yeomss.tistory.com/102?category=985840 

 

[자료구조] [BJ9093] 단어 뒤집기

🚩 문제 설명 https://www.acmicpc.net/problem/9093 9093번: 단어 뒤집기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이

yeomss.tistory.com

 

# 코드플러스 단어 뒤집기 2 파이썬

# 백준 17413 파이썬

# 백준 단어 뒤집기2 파이썬


 

728x90