πŸ“š Study/Baekjoon

[Silver II] 12933 - 였리

윰갱 2025. 5. 4. 20:38

문제

였리의 울음 μ†Œλ¦¬λŠ” "quack"이닀. μ˜¬λ°”λ₯Έ 였리의 울음 μ†Œλ¦¬λŠ” 울음 μ†Œλ¦¬λ₯Ό ν•œ 번 λ˜λŠ” κ·Έ 이상 μ—°μ†ν•΄μ„œ λ‚΄λŠ” 것이닀. 예λ₯Ό λ“€μ–΄, "quack", "quackquackquackquack", "quackquack"λŠ” μ˜¬λ°”λ₯Έ 였리의 울음 μ†Œλ¦¬μ΄λ‹€.

μ˜μ„ μ΄μ˜ λ°©μ—λŠ” μ˜€λ¦¬κ°€ μžˆλŠ”λ°, 문제λ₯Ό λ„ˆλ¬΄ μ—΄μ‹¬νžˆ ν’€λ‹€κ°€ λͺ‡ 마리의 μ˜€λ¦¬κ°€ μžˆλŠ”μ§€ κΉŒλ¨Ήμ—ˆλ‹€.

κ°‘μžκΈ° μ˜μ„ μ΄μ˜ 방에 μžˆλŠ” μ˜€λ¦¬κ°€ 울기 μ‹œμž‘ν–ˆκ³ , 이 μšΈμŒμ†Œλ¦¬λŠ” μ„žμ΄κΈ° μ‹œμž‘ν–ˆλ‹€. μ˜μ„ μ΄λŠ” 일단 μšΈμŒμ†Œλ¦¬λ₯Ό λ…ΉμŒν–ˆκ³ , λ‚˜μ€‘μ— λ“€μ–΄λ³΄λ©΄μ„œ 총 λͺ‡ 마리의 μ˜€λ¦¬κ°€ μžˆλŠ”μ§€ ꡬ해보렀고 ν•œλ‹€.

λ…ΉμŒν•œ μ†Œλ¦¬λŠ” λ¬Έμžμ—΄λ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλŠ”λ°, ν•œ λ¬ΈμžλŠ” ν•œ μ˜€λ¦¬κ°€ λ‚Έ μ†Œλ¦¬μ΄λ‹€. 였리의 울음 μ†Œλ¦¬λŠ” 연속될 ν•„μš”λŠ” μ—†μ§€λ§Œ, μˆœμ„œλŠ” "quack"이어야 ν•œλ‹€. "quqacukqauackck"κ³Ό 같은 κ²½μš°λŠ” 두 μ˜€λ¦¬κ°€ μšΈμ—ˆλ‹€κ³  λ³Ό 수 μžˆλ‹€.

μ˜μ„ μ΄κ°€ λ…ΉμŒν•œ μ†Œλ¦¬κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ˜μ„ μ΄ 방에 μžˆμ„ 수 μžˆλŠ” 였리의 μ΅œμ†Œ 개수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 μ˜μ„ μ΄κ°€ λ…ΉμŒν•œ μ†Œλ¦¬κ°€ μ£Όμ–΄μ§„λ‹€. μ†Œλ¦¬μ˜ κΈΈμ΄λŠ” 5보닀 ν¬κ±°λ‚˜ κ°™κ³ , 2500보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄κ³ , 'q','u','a','c','k'둜만 이루어져 μžˆλ‹€.

좜λ ₯

μ˜μ„ μ΄ 방에 μžˆμ„ 수 μžˆλŠ” 였리의 μ΅œμ†Œ 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. λ…ΉμŒν•œ μ†Œλ¦¬κ°€ μ˜¬λ°”λ₯΄μ§€ μ•Šμ€ κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯ 1 λ³΅μ‚¬

quqacukqauackck

예제 좜λ ₯ 1 λ³΅μ‚¬

2

예제 μž…λ ₯ 2 λ³΅μ‚¬

kcauq

예제 좜λ ₯ 2 λ³΅μ‚¬

-1

예제 μž…λ ₯ 3 λ³΅μ‚¬

quackquackquackquackquackquackquackquackquackquack

예제 좜λ ₯ 3 λ³΅μ‚¬

1

예제 μž…λ ₯ 4 λ³΅μ‚¬

qqqqqqqqqquuuuuuuuuuaaaaaaaaaacccccccccckkkkkkkkkk

예제 좜λ ₯ 4 λ³΅μ‚¬

10

예제 μž…λ ₯ 5 λ³΅μ‚¬

quqaquuacakcqckkuaquckqauckack

예제 좜λ ₯ 5 λ³΅μ‚¬

3

예제 μž…λ ₯ 6 λ³΅μ‚¬

quackqauckquack

예제 좜λ ₯ 6 λ³΅μ‚¬

-1

# 풀이 방법

duck_crying 리슀트λ₯Ό λŒλ©΄μ„œ λ°”λ‘œλ°”λ‘œ μ²΄ν¬ν•˜λŠ” λ°©λ²•μœΌλ‘œ μ½”λ“œλ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.

quack = "quack'이라고 μ •μ˜ν•˜κ³ 

ongoing 리슀트λ₯Ό λ§Œλ“€μ–΄ ν•˜λ‚˜μ”© μΆ”κ°€ν•˜λŠ” 방식이닀.

 

μ΄λ ‡κ²Œ κ΅¬ν˜„ν•˜κ³  μ‹Άμ—ˆμ§€λ§Œ 아이디어가 λ– μ˜€λ₯΄μ§€ μ•Šμ•„ λ‹€λ₯Έ ν’€μ΄λ‘œ μ ‘κ·Όν–ˆλ˜κ±΄λ°

잘 기얡해놔야겠닀.


# μ½”λ“œ

import sys
sys.stdin = open("input.txt","r")

duck_crying = list(sys.stdin.readline().strip())

# μ˜¬λ°”λ₯Έ 울음 μˆœμ„œ
quack = "quack"
ongoing = []  # μ§„ν–‰ 쀑인 quack μƒνƒœλ“€

for ch in duck_crying:
    placed = False
    for i in range(len(ongoing)):
        idx = ongoing[i]
        if ch == quack[(idx + 1) % 5]:  # λ‹€μŒ λ¬Έμžμ™€ μΌμΉ˜ν•˜λ©΄
            ongoing[i] = (idx + 1) % 5
            placed = True
            break
    if not placed:
        if ch == 'q':
            ongoing.append(0)
        else:
            print(-1)
            sys.exit()
    print(ongoing)

# λͺ¨λ“  μšΈμŒμ€ "k"μ—μ„œ λλ‚˜μ•Ό 함 (quack의 λ§ˆμ§€λ§‰ 문자)
if all(x == 4 for x in ongoing):
    print(len(ongoing))
else:
    print(-1)

# μ°Έκ³ 

첫 μ‹œλ„.. ν‹€λ¦° μ½”λ“œλΌκ³  ν•˜λŠ”λ° 이유λ₯Ό λͺ¨λ₯΄κ² μŒ μž…λ ₯ μ˜ˆμ‹œκ°€ λ‹€ λ§žλŠ”λ°

<방법>

일단 울음 μ†Œλ¦¬μ˜ μ‹œμž‘μΈ q의 μœ„μΉ˜λ₯Ό μ°ΎλŠ”λ‹€.

그리고 각각의 울음 μ†Œλ¦¬λ§ˆλ‹€ (μ‹œμž‘μœ„μΉ˜=q, 끝 μœ„μΉ˜=k)λ₯Ό μ €μž₯ν•œλ‹€.

이 울음 μ†Œλ¦¬κ°€ 겹치면 였리의 μˆ˜κ°€ μ¦κ°€ν•˜κ³ , κ·Έλ ‡μ§€ μ•Šμ„ κ²½μš°μ—λŠ” μ΄μ „μ˜ λ™μΌν•œ 였리라고 νŒλ‹¨ν•œλ‹€.

# 2025-05-04 18:46-
import sys
sys.stdin = open("input.txt","r")

duck_crying = list(sys.stdin.readline().strip())
position_q = [] # q의 μ‹œμž‘ μœ„μΉ˜μ €μž₯
quack_list = [] # quack의 

for i in range(len(duck_crying)):
    if duck_crying[i] == 'q':
        position_q.append(i)

for pq in position_q:
    tmp_list = ['q']
    duck_crying[pq] = '*'
    for i in range(pq+1,len(duck_crying)):
        if len(tmp_list) == 1 and duck_crying[i] == 'u':
            duck_crying[i] = '*'
            tmp_list.append('u')
        elif len(tmp_list) == 2 and duck_crying[i] == 'a':
            duck_crying[i] = '*'
            tmp_list.append('a')
        elif len(tmp_list) == 3 and duck_crying[i] == 'c':
            duck_crying[i] = '*'
            tmp_list.append('c')
        elif len(tmp_list) == 4 and duck_crying[i] == 'k':
            duck_crying[i] = '*'
            quack_list.append((pq,i))
            break

if len(quack_list)*len('quack') != len(duck_crying):
    print(-1)
else:
    cnt_duck = 1
    for i in range(1, len(quack_list)):
        pq1, pk1 = quack_list[i-1]
        pq2, pk2 = quack_list[i]

        if not pk1 < pq2:
            cnt_duck += 1
        
            for j in range(i-1,-1,-1):
                pq3, pk3 = quack_list[j]
                if pk3 < pq2:
                    cnt_duck -= 1
                    break

    print(cnt_duck)