17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
문제 풀이:
import sys
S = sys.stdin.readline()
result = []
minor = []
flag = 0
for i in range(len(S)):
if S[i]=='>':
flag = 0
result.append(''.join(minor)) #<>안의 단어들은 뒤집지 않으니 그대로 넣기.
minor = []
result.append(S[i]) # '>' 문자 넣기
elif (S[i] == '<'):
result.append(''.join(reversed(minor))) # '<'문자 전의 문자들 뒤집어서 넣기.
minor = []
result.append(S[i]) # '<' 문자 넣기
flag = 1 # <> 안의 단어들은 그대로 넣어야하니 플래그 선언
elif (flag!=1) & ((S[i] == ' ') or (i==len(S)-1)): # 띄어쓰기 전이나 마지막일 경우
result.append(''.join(reversed(minor))) # 뒤집어서 넣기
result.append(S[i]) # 띄어쓰기나 마지막 문자 넣기
minor = []
else:
minor.append(S[i]) # 그외 문자 넣기
print(''.join(result)) # 출력
포인트:
1. 리스트 자체를 프린트하면 '통째로' 나오니, 안의 원소들을 출력하고 싶으면 ''.join(리스트명) 으로 해야된다.
2. 리스트 안의 원소들을 뒤집으려면 reversed(리스트명) *리스트명.reverse()하면 바뀐 원소를 반환하진 않는다.
3. <> 사이 문자들은 그대로 출력되니 flag를 이용하여 다름을 표시하기
4. 뒤집어지는 포인트 주의하기:<>에 포함되지 않는 띄어쓰기나 마지막 문자.
5. 반복문(for)문의 변수 i는 변경할 수 없더라!!
느낀점:
제약들이 있어서 조건절을 많이? 썼다. 만들고 나서도 어떻게하면 더 효율적일까 고민하는데 시간을 많~이 할애했다.. 했는데 번뜩이는 방법은 더 안 떠올랐다.ㅠㅠ 제출 후 다른 사람들은 어떻게 짰나 보았더니 큐나 스택을 이용하고 조건절 많이 썼더라. 내가 짠 코드랑 전반적으로 비슷했다.
'코딩 연습 > Python' 카테고리의 다른 글
5단계 배열 (0) | 2021.06.28 |
---|---|
정렬 1431번 (0) | 2021.03.02 |
그래프 알고리즘 2606번 (0) | 2021.03.01 |
Python 입력: sys.readline() 정리 (0) | 2021.02.05 |
그리디 알고리즘 13305번 (0) | 2021.02.05 |