๐Ÿค–/๋ฐฑ์ค€

๋ฐฑ์ค€ 12933: ์˜ค๋ฆฌ (Python)

sssbin 2023. 4. 14. 00:09

 

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

 

12933๋ฒˆ: ์˜ค๋ฆฌ

์ฒซ์งธ ์ค„์— ์˜์„ ์ด๊ฐ€ ๋…น์Œํ•œ ์†Œ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์†Œ๋ฆฌ์˜ ๊ธธ์ด๋Š” 5๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 2500๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , 'q','u','a','c','k'๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

www.acmicpc.net

 

 

๋กœ์ง์€ ์ด๋Ÿฌํ•จ..

์ด๋•Œ๊นŒ์ง€๋งŒ ํ•ด๋„ ์‰ฌ์šด ๋ฌธ์ œ์ธ ์ค„ ์•Œ์•˜์ง€..

 

์ฒซ ์‹œ๋„ (์‹คํŒจ)

sound๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ

q -> u -> a -> c -> k ์— ํ•ด๋‹นํ•˜๋ฉด ๋„˜์–ด๊ฐ€๊ณ , ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด temp ๋ฐฐ์—ด์— ๋ฌธ์ž๋ฅผ ๋„ฃ๋Š”๋‹ค.

์ˆœํšŒ๊ฐ€ ๋๋‚œ ํ›„ sound์™€ temp๊ฐ€ ๊ฐ™๋‹ค๋ฉด (q-u-a-c-k๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ) breakํ•ด์ฃผ๊ณ ,

๊ฐ™์ง€ ์•Š๋‹ค๋ฉด sound = temp ํ›„ ์ •๋‹ต์„ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

sound = input()

duck = ['q', 'u', 'a', 'c', 'k']
answer = 0

while sound:
    temp = []
    pos = 0
    for s in sound:
        if s == duck[pos]:
            pos += 1
            if pos > 4:
                pos = 0
        else:
            temp.append(s)
    
    if sound == temp:
        answer = -1
        break

    sound = temp
    answer += 1

print(answer)

๋ฐ˜๋ก€) quackq -> -1 ์ถœ๋ ฅ (๋‚ด ์ฝ”๋“œ๋Š” 1 ์ถœ๋ ฅ)

 

๋‘ ๋ฒˆ์งธ / ์„ธ ๋ฒˆ์งธ ์‹œ๋„ (์‹œ๊ฐ„ ์ดˆ๊ณผ)

sound์˜ ๊ธธ์ด๊ฐ€ 5์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ break๋ฌธ์„ ๊ฑธ์–ด์ฃผ๋Š” ๊ฑธ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.

๋‚˜๋จธ์ง€๋Š” ์œ„๋ž‘ ๋™์ผ

sound = input()

duck = ['q', 'u', 'a', 'c', 'k']
answer = 0

while sound:
    if len(sound) % 5 != 0:
        answer = -1
        break

    temp = []
    pos = 0

    for s in sound:
        if s == duck[pos]:
            pos += 1
            if pos > 4:
                pos = 0
        else:
            temp.append(s)

    sound = temp
    answer += 1

print(answer)

๊ฑฐ์˜ ๋๊นŒ์ง€ ์ฑ„์ ํ•˜๊ธธ๋ž˜ ํ†ต๊ณผ๋˜๋Š” ์ค„ ์•Œ์•˜์œผ๋‚˜ 95%์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผํ•จ..

 

์‹œ๊ฐ„ ์กฐ๊ธˆ์ด๋ผ๋„ ์ค„์—ฌ๋ณด๊ฒ ๋‹ค๊ณ 

len(sound)๋ฅผ ๋งค ๋ฐ˜๋ณต๋ฌธ๋งˆ๋‹ค ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ ,

size = len(sound) ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์ฃผ๊ณ  s == duck[pos]์ผ ๋•Œ size ํ•˜๋‚˜์”ฉ ๊ฐ์†Œ์‹œํ‚ค๋„๋ก ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ

๋˜‘๊ฐ™์ด 95%์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผํ–ˆ๋‹ค.

 

๋„ค ๋ฒˆ์งธ ์‹œ๋„ (์„ฑ๊ณต)

visited ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ (False), q - u - a - c - k ์ˆœ์„œ๋Œ€๋กœ ๋งŒ๋‚  ๋•Œ๋งˆ๋‹ค True๋กœ ๋ฐ”๊ฟ”์คฌ๋‹ค.

๋งค ๋ฐ˜๋ณต๋ฌธ๋งˆ๋‹ค visited=True์ด๋ฉด ๋น„๊ตํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ€๋„๋ก ํ–ˆ๋‹ค.

 

total, cnt ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์ฃผ๊ณ 

cnt - ๊ฐ ๋ฐ˜๋ณต๋ฌธ์—์„œ ๋ฐฉ๋ฌธํ•œ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜

total - ๋ชจ๋“  ๋ฐ˜๋ณต๋ฌธ์—์„œ ๋ฐฉ๋ฌธํ•œ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜์˜ ์ดํ•ฉ

 

while๋ฌธ ์กฐ๊ฑด์„ total < len(sound)๋กœ ์žก์•„์ฃผ๊ณ 

(๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋‹ค ์ž๋ฅด๋ฉด ์ข…๋ฃŒ)

cnt๊ฐ€ 5์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜(quack ์ค‘๊ฐ„์—์„œ ์ž˜๋ฆฐ ๊ฒฝ์šฐ), 0์ผ ๋•Œ(์ž๋ฅธ ๋ฌธ์ž์—ด์ด ์—†๋Š” ๊ฒฝ์šฐ)

break๋ฌธ์„ ๊ฑธ์–ด์คฌ๋‹ค.

 

sound = input()

duck = ['q', 'u', 'a', 'c', 'k']
visited = [False] * len(sound)
total = 0
answer = 0

while total < len(sound):
    temp = []
    cnt = 0
    pos = 0

    for i in range(len(sound)):
        if visited[i]:
            continue

        if sound[i] != duck[pos]:
            continue
      
        visited[i] = True
        cnt += 1
        total += 1

        pos += 1
        if pos > 4:
            pos = 0
    
    if cnt % 5 != 0 or cnt == 0:
        answer = -1
        break

    answer += 1

print(answer)

๋“œ๋””์–ด... ํ†ต๊ณผํ–ˆ๋‹ค..

์ง„์งœ ํ’€๋‹ค๊ฐ€ ํ™ง๋ณ‘ ๋‚  ๋ป” ใ…œใ…œใ…œ