[๋ฐฑ์ค€ ๐Ÿฅ‡5] 22251๋ฒˆ ๋นŒ๋Ÿฐ ํ˜ธ์„ (Python/ํŒŒ์ด์ฌ)

mingssoยท2023๋…„ 7์›” 1์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
32/35

1๏ธโƒฃ ๋ฌธ์ œ

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



2๏ธโƒฃ ์ฝ”๋“œ

n, k, p, x = map(int, input().split())

# ์ž๋ฆฟ์ˆ˜ ๋งž์ถฐ์ฃผ๊ธฐ 
if len(str(x)) < k:
    cx = '0' * (k-len(str(x))) + str(x)   
else:
    cx = str(x)

num = ['1111110', '0110000', '1101101', '1111001', '0110011', '1011011',
       '1011111', '1110000', '1111111', '1111011']
arr = []

for i in range(10):
    arr.append([])
    for j in range(10):
        if i == j:
            arr[i].append(0)
        else:
            d = 0
            for h in range(7):
                if num[i][h] != num[j][h]:
                    d += 1
            arr[i].append(d)


def dfs(dep, cnt, cx):   # ๊นŠ์ด, ๋‚จ์€ ๋ฐ˜์ „ ๊ฐ€๋Šฅ ํšŸ์ˆ˜, ํ˜„์žฌ ๋ฌธ์ž์—ด
    if dep >= len(cx):
        if int(cx) == x:   # ํ˜„์žฌ ์ธต์ˆ˜์™€ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์œผ๋ฉด ์•ˆ๋จ 
            return 0
        elif 1 <= int(cx) <= n:   # ์กฐ๊ฑด์— ๋งž๋Š” ๊ฒฝ์šฐ
            return 1
        else:   # ๊ทธ์™ธ ๊ฒฝ์šฐ๋Š” ๋ถˆ๊ฐ€๋Šฅ 
            return 0

    rst, cur = 0, int(cx[dep])   # ์ •๋‹ต, ํ˜„์žฌ ๋ฐ”๊ฟ”์ค„ ์ˆซ์ž 
    for i in range(10):
        if cur != i and (arr[cur][i] <= cnt):   # ๋‚จ์€ ๋ฐ˜์ „ ๊ฐ€๋Šฅ ํšŸ์ˆ˜๋ณด๋‹ค ํ•„์š”ํ•œ ๋ฐ˜์ „ ํšŸ์ˆ˜๊ฐ€ ์ž‘์•„์•ผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ
            dx = cx[:dep] + str(i) + cx[dep+1:]
            rst += dfs(dep+1, cnt-arr[cur][i], dx)

        elif cur == i:
            rst += dfs(dep+1, cnt, cx)

    return rst
            
                
print(dfs(0, p, cx))



3๏ธโƒฃ ํ’€์ด

ํ‹ฐ์–ด๊ฐ€ ๊ณจ5์ธ๋ฐ ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผํ• ์ง€ ๊ฐ์ด ์•ˆ์™€์„œ ์‚ด์ง ์ถฉ๊ฒฉ๋จน์Œ๐Ÿ˜ข
์ฐพ์•„๋ณด๋‹ˆ ํŒŒ์ด์ฌ ํ’€์ด๋Š” ๋‚˜์˜ค์ง€๋„ ์•Š์•„์„œ ๋‹ค๋ฅธ๋ถ„๋“ค C++ ํ’€์ด ๋ณด๊ณ  ํ’€์—ˆ๋‹ค
๋น„ํŠธ๋งˆ์Šคํ‚น+DFS ๋ฌธ์ œ์˜€๋‹ค

โ€‹

์ฝ”๋“œ ์œ—๋ถ€๋ถ„๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์„ค๋ช…ํ•˜๋ฉด

  1. ๋ฌธ์ œ์— ๋‚˜์™€์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ K=4์ธ๋ฐ X=501์ผ ๊ฒฝ์šฐ, 0501๋กœ 0์„ ์•ž๋ถ€๋ถ„์— ๋”ํ•ด ์ž๋ฆฟ์ˆ˜๋ฅผ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•œ๋‹ค

โ€‹

  1. num ๋ฆฌ์ŠคํŠธ๋Š” ๋””์Šคํ”Œ๋ ˆ์ด์˜ ๊ฐ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์ค€ ๊ฒƒ์ด๋‹ค

    ์ด๋Ÿฐ์‹์œผ๋กœ ๋ถˆ์ด ๋“ค์–ด์˜จ ๋ถ€๋ถ„์€ 1, ๋“ค์–ด์˜ค์ง€ ์•Š์€ ๋ถ€๋ถ„์€ 0์œผ๋กœ ํ•ด์„œ ๊ฐ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค!

โ€‹

  1. arr์€ ๊ฐ ์ˆซ์ž๋ฅผ ๋‹ค๋ฅธ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ€ ๋•Œ ๋ฐ˜์ „์‹œ์ผœ์ค˜์•ผ ํ•˜๋Š” LED์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•œ ๋ฆฌ์ŠคํŠธ์ด๋‹ค
    ์•„๋ž˜ ์‚ฌ์ง„์€ ์‹ค์ œ ์ฝ”๋“œ์—์„œ arr ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•œ ์‚ฌ์ง„์ธ๋ฐ, ๋ฌธ์ œ์—์„œ ๋‚˜์˜จ ๊ฒƒ์ฒ˜๋Ÿผ ์ˆซ์ž 1์„ 2๋กœ ๋ฐ”๊พธ๋ ค๋ฉด ์ด 5๊ฐœ์˜ LED๋ฅผ ๋ฐ˜์ „์‹œ์ผœ์•ผ ํ•˜๋ฏ€๋กœ, arr[1][2]=5์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค
    ๋‚œ ๊ทธ๋ƒฅ ๋‹จ์ˆœํ•˜๊ฒŒ 3์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๊ณ„์‚ฐํ–ˆ๋‹ค

โ€‹

  1. ๋งˆ์ง€๋ง‰์œผ๋กœ DFS ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ฉด, ์‹ค์ œ ์ธต์ˆ˜(X)์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉฐ ์กฐ๊ฑด์— ๋งž๋Š”์ง€ ํ™•์ธํ•œ๋‹ค
    ์ฆ‰, X=35์ด๋ฉด 3์„ ๋‹ค๋ฅธ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ , 5๋ฅผ ๋‹ค๋ฅธ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉฐ, ๊ฒฐ๊ณผ๊ฐ€ 1 ์ด์ƒ 48 ์ดํ•˜์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค (ํ…Œ์ผ€ 2๋ฒˆ์˜ ๊ฒฝ์šฐ)
    ๋‚˜๋จธ์ง€๋Š” ์ „ํ˜•์ ์ธ DFS ๋ฐฉ์‹์ด๋‹ค

โ€‹

์•Œ๊ณ ๋ณด๋ฉด ๋ณ„๋กœ ์–ด๋ ต์ง„ ์•Š์€ ๋ฌธ์ œ์ธ๋ฐ
๋งŒ์•ฝ ์‹ค์ œ ์ฝ”ํ…Œ์—์„œ ์ด๋ ‡๊ฒŒ ๋‚˜์™”์„ ๋•Œ ํ’€ ์ˆ˜ ์žˆ์„์ง€๋Š” ๊ธ€์Ž„์š”๐Ÿ˜”

profile
๐Ÿฅ๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ’ฐ

0๊ฐœ์˜ ๋Œ“๊ธ€