공부하는 것들/알고리즘
백준 159094 : UCPC는 무엇의 약자일까?(그리디) **
amapro
2021. 2. 25. 22:09
15904번: UCPC는 무엇의 약자일까?
첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는
www.acmicpc.net
정규표현식으로 대문자만 간추렸을 때, UCPC가 되면 되는 줄 알았는데 문제가 두개 있다.
1) set(['UCPC'])하면서 순서가 바뀐다는 것
2) 'UCCPC' 같은 것도 답이 된다는 것...
que에 UCPC를 담아두고, for문을 돌면서 대문자열에 순서대로 나오는 지 지워줌.
que가 empty가 될 때까지 or 대문자열을 다 돌 때까지 반복
import re
if __name__=='__main__':
S = input().replace(' ','')
pressed = re.findall('[A-Z]',S)
check = []
que = ['U','C','P','C']
i=0
while que:
if i>= len(pressed): break
char = pressed[i]
if char == que[0]:que.pop(0)
i+=1
if que==[] : print('I love UCPC')
else : print('I hate UCPC')
_________________________________ 오답 풀이 __________________________________________
if : break문만 순서를 맨 뒤로 보냈을 뿐인데, 인덱스 에러가 났다. 길이가 자연수일 때는 문제가 없어보였는데,
에러가 나는 경우를 보니, 대문자를 추출한 pressed가 empty list일 경우, pressed[0]을 찾을 수 없어, 인덱스 에러가 난다.
코너 케이스: pressed = [ ]
import re
if __name__=='__main__':
S = input().replace(' ','')
pressed = re.findall('[A-Z]',S)
check = []
que = ['U','C','P','C']
i=0
while que: ## suppose, len(pressed)==4, i =3
char = pressed[i] ## char = pressed[3]
if char == que[0]:que.pop(0) ## que not empty니까 가능
i+=1 ## i = 4
if i>= len(pressed): break ## while문 빠져나감
##89%에서 인덱스 에러가 남
if que==[] : print('I love UCPC')
else : print('I hate UCPC')