나를 기록하다
article thumbnail
반응형

단어 뒤집기 2

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초512 MB2279212854991556.657%

문제

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.

먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.

  1. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
  1. 문자열의 시작과 끝은 공백이 아니다.
  1. '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.

태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.

입력

첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.

출력

첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.

예제

예제 입력 1

baekjoon online judge

예제 출력 1

noojkeab enilno egduj

예제 입력 2

<open>tag<close>

예제 출력 2

<open>gat<close>

예제 입력 3

<ab cd>ef gh<ij kl>

예제 출력 3

<ab cd>fe hg<ij kl>

예제 입력 4

one1 two2 three3 4fourr 5five 6six

예제 출력 4

1eno 2owt 3eerht rruof4 evif5 xis6

예제 입력 5

<int><max>2147483647<long long><max>9223372036854775807

예제 출력 5

<int><max>7463847412<long long><max>7085774586302733229

예제 입력 6

<problem>17413<is hardest>problem ever<end>

예제 출력 6

<problem>31471<is hardest>melborp reve<end>

예제 입력 7

<   space   >space space space<    spa   c e>

예제 출력 7

<   space   >ecaps ecaps ecaps<    spa   c e>

답안

1)

def reverse_words_in_string(string):
    result = ''
    word = ''
    tag = False

    for char in string:
        if char == '<':
            result += word[::-1] + char
            word = ''
            tag = True
        elif char == '>':
            result += char
            tag = False
        elif tag:
            result += char
        elif char == ' ':
            result += word[::-1] + char
            word = ''
        else:
            word += char

    result += word[::-1]
    return result

string = input()
print(reverse_words_in_string(string))
def reverse_words_in_string(string):
  • 문자열에서 단어의 순서를 뒤집는 함수를 정의합니다. 함수의 이름은 "reverse_words_in_string"입니다. 문자열 인자인 "string"을 받습니다.
result = ''
word = ''
tag = False
  • 결과 문자열을 저장할 "result" 변수, 현재 단어를 저장할 "word" 변수, 태그 상태를 저장할 "tag" 변수를 초기화합니다.
for char in string:
  • 문자열의 각 문자를 한 글자씩 순회합니다.
if char == '<':
    result += word[::-1] + char
    word = ''
    tag = True
  • "<" 문자를 만나면, 현재까지 만들어진 단어를 뒤집어서 결과 문자열 "result"에 추가하고, "<" 문자도 추가합니다. "word" 변수를 초기화하고, 태그 상태를 True로 변경합니다.
elif char == '>':
    result += char
    tag = False
  • ">" 문자를 만나면, ">" 문자를 결과 문자열 "result"에 추가하고, 태그 상태를 False로 변경합니다.
elif tag:
    result += char
  • 태그 상태일 때, 현재 문자를 그대로 결과 문자열 "result"에 추가합니다.
elif char == ' ':
    result += word[::-1] + char
    word = ''
  • 공백 문자를 만나면, 현재까지 만들어진 단어를 뒤집어서 결과 문자열 "result"에 추가하고, 공백 문자도 추가합니다. "word" 변수를 초기화합니다.
else:
    word += char
  • 위의 경우들이 아니면, 현재 문자를 "word" 변수에 추가합니다.
result += word[::-1]
return result
  • 순회가 끝나면, 마지막으로 만들어진 단어를 뒤집어서 결과 문자열 "result"에 추가합니다. 그리고 결과 문자열 "result"을 반환합니다.
string = input()
print(reverse_words_in_string(string))
  • 사용자로부터 문자열을 입력받고, "reverse_words_in_string" 함수를 호출하여 결과를 출력합니다.

2)

def print_stack(stack):
    while stack:
        print(stack.pop(), end='')

string = input()
tag = False
stack = []

for char in string:
    if char == '<':
        print_stack(stack)
        tag = True
        print(char, end='')
    elif char == '>':
        tag = False
        print(char, end='')
    elif tag:
        print(char, end='')
    else:
        if char == ' ':
            print_stack(stack)
            print(char, end='')
        else:
            stack.append(char)

print_stack(stack)
print()
def print_stack(stack):
    while stack:
        print(stack.pop(), end='')
  • "print_stack" 함수를 정의합니다. 이 함수는 스택에 저장된 값을 역순으로 출력합니다. 스택이 빌 때까지 스택에서 값을 꺼내면서 출력합니다.
string = input()
tag = False
stack = []
  • 사용자로부터 문자열을 입력받고, 태그 상태를 저장하는 "tag" 변수, 문자열을 처리하는 데 사용될 스택을 초기화합니다.
for char in string:
  • 문자열의 각 문자를 한 글자씩 순회합니다.
if char == '<':
    print_stack(stack)
    tag = True
    print(char, end='')
  • "<" 문자를 만나면, 스택에 저장된 값들을 역순으로 출력한 후, 태그 상태를 True로 변경합니다. "<" 문자를 출력합니다.
elif char == '>':
    tag = False
    print(char, end='')
  • ">" 문자를 만나면, 태그 상태를 False로 변경하고, ">" 문자를 출력합니다.
elif tag:
    print(char, end='')
  • 태그 상태일 때, 현재 문자를 그대로 출력합니다.
else:
    if char == ' ':
        print_stack(stack)
        print(char, end='')
    else:
        stack.append(char)
  • 위의 경우들이 아니면, 현재 문자를 스택에 추가합니다. 공백 문자를 만나면, 스택에 저장된 값들을 역순으로 출력하고, 공백 문자를 출력합니다.
print_stack(stack)
print()
  • 순회가 끝나면, 스택에 저장된 값들을 역순으로 출력합니다. 그리고 줄바꿈 문자를 출력합니다.


Uploaded by N2T

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...