Algorithm
[알고리즘] 백준 15904번_UCPC는 무엇의 약자일까? 문제풀이 (Python 파이썬)
seunkorea
2023. 7. 17. 16:51
15904번: UCPC는 무엇의 약자일까?
첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는
www.acmicpc.net
문제 상황
공백, 대,소문자로 이루어진 문자열에 대해서 공백과 소문자를 모두 지우고 적절히 축약해서 UCPC를 만들 수 있는지 체크
구하고자 하는 것
주어진 문자열을 UCPC로 만들 수 있는가
입력
알파벳 대소문자, 공백으로 구성된 최대 길이 1,000의 문자열
(양 끝에 공백 X, 연속적인 공백 X)
IDEA
대문자로만 일단 판단하기 때문에 소문자와 공백을 지우고 시작
소문자와 공백을 모두 지우고 대문자만 남기는 방법 : `re.sub` 사용 (원하는 문자만 남기고 제거하기)
import re
re.sub('찾을 패턴', '찾은 패턴을 변경할 내용', '원본')
소문자와 공백이 지워진 대문자로만 이루어진 문자열에서 U, C, P, C가 차례로 등장해야 한다.
단순히, 문자열 안에 UCPC가 있는지 in으로 확인하면 XX
(예외 : UCCPQC에는 UCPC가 없지만 적절히 U,C,P,C는 차례로 등장하기 때문에 가능하다.)
따라서 리스트에 U, C, P, C를 차례로 저장하고 순서대로 소문자와 공백이 제거된 문자열에 있는지 체크
문자열을 찾았을 경우 다음 문자는 찾은 문자열의 뒷쪽에서 찾아야함, 즉 내가 찾는 대상의 문자열을 업데이트
Code
import re
InputString = input()
find_list = ['U','C','P','C']
ans = True
new = re.sub(r"[a-z ]", "", InputString)
for f in find_list:
if f in new :
new = new[new.find(f)+1:]
else :
ans = False
if ans :
print('I love UCPC')
else :
print('I hate UCPC')