-
백준 17413번 파이썬알고리즘 자료구조 2021. 9. 17. 01:51728x90
https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
[<]여기부터 [>] 여기까지는 그대로 두고 다른텍스트들은 다 뒤집으면되는데
내가 멍청한건지 처음에 봤을때 어떻게 구현하지?? 이생각만 20분정도 했던거같음
3개의 함수를 만들었음
S(input)를 배열에 담아서 리턴해주는 함수와
텍스트를 거꾸로 뒤집어주는함수
그리고 < 이게 들어있으면
그대로 냅두고 그렇지않으면 뒤집어주는 함수
Reverse_string
def Reverse_string(msg): sum = "" #뒤집은거 담아줄 변수 text = list(msg.split(' ')) #띄어쓰기 기준으로 나눠줌 count = 0 #띄어쓰기 몇번 해야하는지 세는거 space = len(text) - 1 # 만약에 띄어쓰기가 4개면 len(list) 하면 5 출력되니까 -1 for i in text: count = count + 1 for j in reversed(range(len(i))): #거꾸로 뒤집어야하니까 마지막 인덱스부터 셈 sum += i[j] #마지막 인덱스에서 첫번쨰 인덱스까지 sum에 담아줌 if count <= space: sum = sum + " " #뒤집어서 그대로 리턴해야해서 띄어쓰기까지 해줌 return sum
솔직히 직접 안짜고 파이썬에 뒤집어주는 함수가 있어서 그거 써도 상관없음
Split_Text
def Split_Text(text): arr = [] op_state = False # opsum = "" #태그인 텍스트 담을거 resum = "" #그냥 텍스트 담을거 for i in text: if i == "<": #<이게 나오면 > 이게 나올때까지 opsum에 넣어야하니까 op_state를 True로 만들어줌 opsum = opsum + i #자기자신 넣어주고 arr.append(resum) #태그가아닌 텍스트들을 배열에 넣어줌 resum = "" #초기화해주는데 안하면 전에있던 값 + 새로들어온 값 같이박힘 op_state = True #true로 만들어주고 continue elif i == ">": #>이게나오면 태그인 텍스트들은 opsum에 있을거니까 opsum = opsum + i arr.append(opsum) #배열에 넣어주고 opsum = "" #여기서 초기화 op_state = False #이것도 continue if op_state: #True면 > 이게 나올때까지 opsum에 넣어줌 opsum = opsum + i else: # false면 그냥 텍스트니까 resum에 넣어줌 resum = resum + i arr.append(resum) #남은것들도 넣어줌 return arr
주석 진짜 이상하게 달았네요
그냥 [<] 이게 나오면 [>]이게 나올때까지 opsum에 넣어주고
닫는 태그가 나오면 opsum을 arr에 담아주는거에요
Return 값
<int><max>2147483647<long long><max>9223372036854775807 이걸
['', '<int>', '', '<max>', '2147483647', '<long long>', '', '<max>', '9223372036854775807']
reverced_return
def reverced_return(arr): sum = "" for i in range(len(arr)): if arr[i].find("<") > -1: # < 이게 존재하는지 안하는지 확인 sum = sum + arr[i] #없으면 그냥 그대로 sum에 넣어줌 continue else: #없으면 뒤집어야 할 텍스트니까 sum = sum + Reverse_string(arr[i]) #뒤집어서 넣어줌 return sum
['', '<int>', '', '<max>', '2147483647', '<long long>', '', '<max>', '9223372036854775807'] 여기서
뒤집어야 할 텍스트는 뒤집고 아니면 냅둠
제대로됨 제출한 코드
def Reverse_string(msg): sum = "" text = list(msg.split(' ')) count = 0 space = len(text) - 1 for i in text: count = count + 1 for j in reversed(range(len(i))): sum += i[j] if count <= space: sum = sum + " " return sum def splittext(text): arr = [] op_state = False opsum = "" resum = "" for i in text: if i == "<": opsum = opsum + i arr.append(resum) resum = "" op_state = True continue elif i == ">": opsum = opsum + i arr.append(opsum) opsum = "" op_state = False continue if op_state: opsum = opsum + i else: resum = resum + i arr.append(resum) for i in arr: if i == "": arr.remove("") return arr def reverced_return(arr): sum = "" for i in range(len(arr)): if arr[i].find("<") > -1: sum = sum + arr[i] continue else: sum = sum + Reverse_string(arr[i]) return sum text = input() arr = splittext(text) print(reverced_return(arr))
728x90'알고리즘 자료구조' 카테고리의 다른 글
백준 5622번 다이얼 Python (0) 2021.12.07 백준 11399번 (0) 2021.12.05 백준 1931번 회의실 (0) 2021.12.04 백준 11047번 그리디 알고리즘 (0) 2021.12.04 백준 4673번 셀프넘버 Python (0) 2021.09.15