-
백준 17413: 단어 뒤집기2(python, 문자열 & 정규표현식)Ploblem Solving 2022. 10. 9. 02:53
사용 언어 티어 시간 제한 메모리 제한 Python 1초 512MB https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
#0 문제
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.문자열의 시작과 끝은 공백이 아니다.'<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.#1 입력
첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.
#2 접근
- 스택을 이용해서 구현하도록 분류되어있긴한데, 정규표현식으로 접근하기로 했다.
#3 풀이
- 우선 '<알파벳, 공백>' 태그와 '알파벳,숫자,공백' 조합들을 찾아서 배열로 반환한다.
- '<[a-z ]+>' 를 사용하면 '<'로 시작하고 '>'로 끝나면서 그 사이에 알파벳 소문자와 공백 조합인 것을 뽑아낸다. +를 붙였기 때문에 존재하는 것만 뽑아낸다.
- '[a-z0-9 ]+' 를 사용하면 알파벳 소문자, 숫자, 공백 조합인것을 뽑아낸다.
- 이를 이용해서 찾아내면 "<알파벳+공백>", "알파벳+공백+숫자" 조합들이 배열로 뽑힌다.
- "<알파벳+공백>"은 뒤집을 필요가 없으므로 그냥 정답에 더해준다.
- "알파벳+공백+숫자" 은 공백을 기준으로 다시 분리해서 배열로 만든다
- 그 후 배열의 원소를 각각 뒤집어준다.
- 새로 만들어진 뒤집어진 배열을 공백을 기준으로 join해주고 정답에 더해준다.
#4 코드
#17413 단어 뒤집기 2 #문자열, 정규표현식 import re r = re.compile('<[a-z ]+>|[a-z0-9 ]+') regs = r.findall(input()) ans = '' for x in regs: if x[0] == '<': ans += x else: temp = x.split(' ') rev = [] for y in temp: y = y[::-1] rev.append(y) rev = " ".join(rev) ans += rev print(ans)'Ploblem Solving' 카테고리의 다른 글
백준 14890: 경사로(c++, 구현) (0) 2022.10.11 백준 16562: 친구비(c++, 분리 집합 & 유니온 파인드) (0) 2022.10.09 백준 8911: 거북이(c++, 구현 & 시뮬레이션) (0) 2022.10.04 백준 6987: 월드컵(c++, 백트래킹) (0) 2022.10.04 백준 3568: iSharp(Python, 구현 & 문자열) (1) 2022.10.04