본문 바로가기

공부하는 것들/알고리즘

백준 159094 : UCPC는 무엇의 약자일까?(그리디) **

www.acmicpc.net/problem/15904

 

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')