-
17413. [Python]단어 뒤집기 2Python_알고리즘/Silver III 2023. 2. 5. 00:27
1. 문제
https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
2. 접근 방법
- 시간 제한: 1초
- 메모리 제한: 512MB
- 스택(원래라면)
- 문자열
3. 파이썬 코드
word = input() # 단어들을 문자열 합칠 변수 words = "" # 거꾸로된 단어를 합칠 변수 reverse_word = "" # <> 태그들을 담을 변수 tag = "" # 태그인지 판단할 변수 check = 0 # 모든 값들들을 담을 리스트 word_list = [] # word 값들을 한개한개씩 반복문을통해 비교 for i in word: # i 값이 < 인 경우 if i == "<": # words에 값이 들어있는경우 if words != "": # revers_word에 words에 저장된 문자를 거꾸로 저장 for j in words[::-1]: reverse_word += j # 역으로정렬한 word를 list에 추가 word_list.append(reverse_word) # reverse_word 변수 초기화 reverse_word = "" # words 변수도 초기화 words = "" # tag변수에 < 추가 tag += i # tag 가 시작이라고 알림 check += 1 # i 값이 > 로 닫는 태그일때 elif i == ">": # tag에 i 더해준 후 tag += i # word_list에 tag 단어 추가 word_list.append(tag) # check를 통해 태그가 끝난걸 알려줌 check -= 1 # tag 변수 초기화 tag = "" else: # 태그인지 아닌지 판별 if check > 0: tag += i else: # i 가 공백인지 아닌지 판단 if i == " ": # 공백일 경우 words에 저장한단어를 역순으로 저장 for j in words[::-1]: reverse_word += j word_list.append(reverse_word) word_list.append(i) # 변수 초기화 reverse_word = "" words = "" else: words += i # 맨마지막 단어는 추가되지 않았기때문에 별도로 추가 for k in words[::-1]: reverse_word += k # 리스트에 저장된 값들 출력 for l in word_list: print(l,end="") print(reverse_word)
4. 문제를 풀고난 후 생각
- 문자열로 풀긴하는데 리스트에 값을 넣고 추가하는 식의 스택으로 풀어볼려고 노력했으나 아직 스택과 큐에 대한 개념을 제대로 정리하지 못해서 문자열 비교를 통해서 문제를 해결함.
- 문자열인지 태그인지 판단하고 태그일 경우 문자열을 뒤집지 않고 리스트에 담았으며 문자열의 경우 문자를 뒤집어서 리스트에 담았다.
- 스택과 큐에대한 개념을 정리한 후 스택으로 풀어보는 방식으로 접근해봐야겠다.
5. 문제를 푸는데 도움이 되는 지식
- 스택
- 문자열 정렬
'Python_알고리즘 > Silver III' 카테고리의 다른 글
1515. [Python]수 이어 쓰기 (0) 2023.04.14 14425. [Python]문자열 집합 (0) 2023.03.01 2108. [Python]통계학 (0) 2023.02.25 1463. [Python]1로 만들기 (0) 2023.02.11 2579. [Python]계단 오르기 (0) 2023.02.06