[2022.02.28 다시 품]
s=input()
button=False
answer='' # 최종값
temp='' # 뒤집어야하는 단어
for i in range(len(s)):
if s[i]=="<": # <를 만나면
if len(temp)!=0: # 만약 temp에 뒤집어야하는 단어가 있었다면?
answer+=temp[::-1] # answer에 Temp를 뒤집어서 넣어준다.
temp='' # temp값은 초기화
button=True # 만약 Temp가 비어있다면?
answer+='<' # 태그가 시작된다는 거! 근데 태그는 뒤집기 할 필요 없으므로 그냥 추가해줌
continue
if button: # 만약 지금 해당 위치가 태그에 해당한다면?
if s[i]==">": # >를 만나면?
button=False # 태그를 나타내는 값을 Off 시켜줌
answer+='>' # > 추가
continue
answer+=s[i] # >를 아직 못 만난 경우엔 태그 속 단어이므로 그대로 추가해줌
continue
if s[i]!=' ': # 만약 태그에 해당하지 않고 현재 공백이 아닌 경우라면?
temp+=s[i] # 뒤집어야할 단어에 속하므로 Temp에 넣는다.
else:
answer+=temp[::-1] # 공백을 만나기 전 단어를 뒤집어서 넣어줄 차례
answer+=' ' # 현재 위치에 있는 공백도 넣어줘야함
temp='' # Temp는 초기화
if i == len(s) - 1 and len(temp)!=0: # 만약 문자열의 끝에 다다르고 뒤집어야할 단어가 존재한다면?
answer+=temp[::-1] # 뒤집어서 추가해줌
print(answer)
2021.08.26
'''
알파벳 소문자, 공백, 숫자, 특수문자
태그
길이가 3이상인 부분 문자열
< > 사이에 소문자, 공백만 가능
단어
소문자, 숫자
연속하는 두 단어
공백으로 구분
태그와 단어
사이에 공백이 없음
단어만 뒤집는다.
'''
sentence = input()
state = True
answer = ''
word = ''
for i in range(len(sentence)):
if sentence[i] == '<': # <일 경우
if word != '': # 만약 단어일경우
answer += word[::-1]
answer += '<'
state = False
word = ''
continue
state = False
answer += '<'
continue
if sentence[i] == '>': # >일 경우
state = True
answer += word[::-1]
answer += '>'
word = ''
continue
if sentence[i] == ' ': # 공백일 경우
answer += word[::-1]
answer += sentence[i]
word = ''
continue
if not state: # 태그
answer += sentence[i]
else: # 단어
if i == len(sentence) - 1:
word += sentence[i]
answer += word[::-1]
break
word += sentence[i]
print(answer)
string = input().replace('>', '<').split('<')
# replace("찾을 값","바꿀 값",바꿀횟수)
result = ""
for i in range(len(string)):
if i % 2 == 1: # 소괄호 안에 있는 단어는 항상 2의 배수가 아님!
result += '<' + string[i] + ">"
else:
temp = string[i].split()
result += ' '.join([word[::-1] for word in temp])
print(result)
> 좋은 방법인 것 같아서 스크랩..
replace를 통해 <를 >로 바꿔주고. split('<')을 해준다.
그러면 소괄호는 사라지고
소괄호가 있던 자리를 기준으로 문자열을 나눌 수 있다.
우리가 뒤집어야 하는 단어의 인덱스는 항상 2의 배수!
<open>tag<close>
['', 'open', 'tag', 'close', '']
소괄호가 있던 자리는 ''로 대체되었다!
그래서 만약 인덱스가 2의 배수가 아닌 경우는
소괄호 안에 있던 단어에 속하므로
뒤집어서는 안된다!
뒤집는 과정은 [::-1]을 통해서 역순으로 출력이 가능하다.
'구분자'.join(리스트)
join을 이용해서 문자열을 합치기
# [::-1] > 전체 문자열 역순으로 출력
# [4::-1] > 4번 인덱스부터 0번 인덱스까지 역순으로 출력
import sys
ex_word = ''
answer = ''
state = False
word = list(sys.stdin.readline().strip())
for i in word:
if state == False:
if i == "<":
state = True
ex_word += i
elif i == " ":
ex_word += i
answer += ex_word
ex_word = ''
else:
ex_word = i+ex_word
else:
ex_word += i
if i == '>':
state = False
answer += ex_word
ex_word = ''
print(answer+ex_word)
아래 코드는 처음에 생각했던 코드
enumerate로 해서 하려고 했는데
뭔가 더 비효율적인 방식인 듯 해서
더 좋은 방법으로 알아왔따!
# if word.count("<") == 0: # 꺽새가 없을 경우
# array = word.split()
# print(array)
# for i in range(len(array)):
# print(array[i], end=' ')
#
# else: # 꺽새가 하나라도 있는 경우 ㅎ
# i = 0
# array = []
# while i<len(word):
# if word[i]=="<":
# i+=1while
# idx_array1 = [i for i, key in enumerate(word) if key == "<"]
# idx_array2 = [i for i, key in enumerate(word) if key == ">"]
# print(idx_array1, idx_array2)
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[n16926] 배열 돌리기 (python) (0) | 2021.05.26 |
---|---|
[n2615] 오목 (in python) (0) | 2021.05.26 |
[n20436] ZOAC 3 in python (0) | 2021.05.21 |
[n20291] 파일 정리 (0) | 2021.05.21 |
[n10994] 별 찍기 - 19 (0) | 2021.05.21 |