Sad Puppy 3 [백준12933] 오리 :: 개발자 아지트

https://www.acmicpc.net/problem/12933

 

문제설명

문제 해결 방법

1. quack이 끝나기전에 q가 나오면 다른 오리가 하나 더 있는 것으로 침 

2. 리스트에 오리가 발견될 때마다 0의 값을 추가해줌

3. quack을 문자마다 0, 1, 2, 3, 4로 표기함.  즉, 오리가 quack을 완성할수록 하나의 인덱스의 값은 0에서 4까지 1씩 증가함

4. 리스트에서 제일먼저 k까지 울은 오리의 index를 따로 다른 리스트를 만들어서 오리를 순서대로 줄세워둠 

5. 최근에 k까지 울은 오리를 먼저 뽑아서 (스택 스타일) q를 먼저 줌(해당 인덱스에 0으로 갱신) = 먼저 울게 해준다.

6. 정상적으로 울지 않는 것에 대해서는 예외처리를 통해 처리하고, -1을 출력함. 

 

코드 구현

# 울음 소리를 한 번 또는 그 이상 연속해서 내는 것

# quack이 끝나기전에 q가 나오면 다른 마리인 것.
# quack이 완벽하게 끝나고 또 quack이 완벽하게 끝나면 한마리로 침

tmp = []

s = input()

waitList=[]

check = 0

for i in s:
    if i == 'q':
        if waitList:
            where = waitList.pop()
            tmp[where] = 0
        else:
            tmp.append(0)
    elif i == 'u':
        try: 
            where = tmp.index(0)
        except ValueError: 
            check = 1
            break
        tmp[where]+=1
    elif i == 'a':
        try: 
            where = tmp.index(1)
        except ValueError: 
            check = 1
            break
        tmp[where]+=1
    elif i == 'c':
        try: 
            where = tmp.index(2)
        except ValueError: 
            check = 1
            break
        tmp[where]+=1
    elif i == 'k':
        try: 
            where = tmp.index(3)
        except ValueError: 
            check = 1
            break
        tmp[where]+=1
        waitList.append(where)
result = 0
if check ==1:
    print(-1)
else:
    for i in tmp:
        if i == 4:
            result +=1  
        else:
            print(-1)
            check = 1
            break
if check !=1:
    print(result)

 

시간/공간 복잡도

O(N)

 

 

최적화 및 개선

따로 하지 않음.

 

어려웠던 점

리스트에서 특정 값을 통해 index를 구할때, index()함수만 쓸 줄 알았다. 그리고 그 함수가 찾고자 하는 값을 못찾을때 -1을 반환하기 보다는 ValueError를 발생시킬줄 몰랐다. 찾아보니 find()함수가 문자열에서 찾고자 하는 값을 못찾을때 -1을 반환했다. 

 

하지만 find()함수를 사용하지 않았다. quack 우는 것을 숫자로 표기해서 문제푸는게 넘 편한데 다시 문자열로 변환할 필요를 못느꼈다. 

 

처음에 문제의 감을 못잡아서 문자열 앞에서부터 quack을 지워갈 생각을 했다. ㅎ; 

 

코딩테스트 문제 풀면서 예외처리문을 처음 사용해본것 같다. 사용법에 대해서 잘 숙지하고 있어야겠다. 

 

코드에 중복되는 부분이 많아서 함수로 표현을 하면 좋을것 같았다. 함수로 코드를 짜버릇 해야겠다. 

+ Recent posts