단어 뒤집기2

bird.j·2021년 7월 20일
0

백준

목록 보기
3/76

백준 17413

  • 문자열 S는 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
  • 문자열의 시작과 끝은 공백이 아니다.
  • '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
  • 태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열
  • '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다.
  • 연속하는 두 단어는 공백 하나로 구분한다.
  • 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.

입출력

입력출력
baekjoon online judgenoojkeab enilno egduj
<open>tag<close><open>gat<close>
<ab cd>ef gh<ij kl><ab cd>fe hg<ij kl>
one1 two2 three3 4fourr 5five 6six1eno 2owt 3eerht rruof4 evif5 xis6
< space >space space space< spa c e>< space >ecaps ecaps ecaps< spa c e>


접근 방식

: <를 만나면 >를 만날 때까지 pass한다.
>를 만나면 <를 만날 때까지를 리스트에 공백 기준으로 담는다.
처음 인덱스 i를 0으로 두고, while문을 돌면서 i번째 원소가 <이면 while문으로 돌면서 i번째 원소가 >가 아닐 동안 i++한다. i번째 원소가 >이면 while문으로 돌면서 i번째 원소가 <가 아닐 동안 i++하고 스택에 i번째 원소를 담는다.

알게된 점

  • <를 만나면 >를 만날 때까지 pass한다.
  • i번째 원소가 숫자나 문자이면, 그때의 시작 i를 start변수에 저장해두고, i가 범위 안에 있으며 i번째 원소가 숫자나 문자일 동안 i++후에 tmp라는 리스트에 string[start:i]를 담고 reverse한다. 그 후 string[start:i]를 tmp로 대체한다.
  • i번째 원소가 <가 아니고, 숫자나 문자도 아니라면 공백이므로 넘어간다.
  • isalnum()은 공백을 포함하지 않으므로 자동으로 공백 전까지의 단어를 판별할 수 있다.


코드

string = list(input())
tmp = []
i = 0

while i < len(string):
    if string[i] == '<':
        i += 1
        while string[i] != '>':
            i += 1
        i += 1
    elif string[i].isalnum():
        start = i
        while i < len(string) and string[i].isalnum():
            i += 1
        tmp = string[start:i]
        tmp.reverse()
        string[start:i] = tmp
    else:
        i += 1

print(''.join(string))

0개의 댓글

관련 채용 정보