์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ตฌํ˜„

[๋ฐฑ์ค€ 22251 ๐Ÿฅ‡] ๋นŒ๋Ÿฐ ํ˜ธ์„

1eehyunji 2023. 8. 11. 00:25

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

 

22251๋ฒˆ: ๋นŒ๋Ÿฐ ํ˜ธ์„

LED๋ฅผ 2๊ฐœ๊นŒ์ง€ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์„ ๋•Œ, 5์ธต์—์„œ 3์ธต, 6์ธต, 8์ธต, ๊ทธ๋ฆฌ๊ณ  9์ธต์œผ๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋‹ค.

www.acmicpc.net

๋ฌธ์ œํ’€์ด

import sys

# N์ธต๊นŒ์ง€ ์กด์žฌ
# K ์ž๋ฆฌ ์ˆ˜ ๋””์Šคํ”Œ๋ ˆ์ด ํ‘œํ˜„
# ์ตœ๋Œ€ P๊ฐœ์˜ LED ๋ฐ˜์ „
# ํ˜„์žฌ X์ธต์— ๋ฉˆ์ถฐ์žˆ์Œ
N,K,P,X=map(int, sys.stdin.readline().split(' '))

# LED๋ฅผ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„
numbers=[ # 0 1 2 3 4 5 6 7 8 9
    [True, True,True,False,True,True,True],
    [False,False,True,False,False,True,False],
    [True, False,True,True,True,False,True],
    [True,False,True,True,False,True,True],
    [False, True,True,True,False,True,False],
    [True,True,False,True,False,True,True],
    [True,True,False,True,True,True,True],
    [True,False,True,False,False,True,False],
    [True,True,True,True,True,True,True],
    [True,True,True,True,False,True,True]
]

# ์ •์ˆ˜๋ฅผ ๋ฐ›์•„์„œ numbers ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
def change_to_arr(num):
    global numbers
    cur = []
    mod = num
    exp = K - 1
    while mod > 0:
        div = pow(10, exp)
        cur.append(numbers[mod // div])
        mod %= div
        exp -= 1
    # 0์œผ๋กœ ๋๋‚˜๋Š” ์ˆ˜ ์ฒ˜๋ฆฌ
    while exp>=0:
        cur.append(numbers[0])
        exp-=1
    return cur

# ๋‘ ๋ฐฐ์—ด์˜ ์ฐจ์ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•จ
def diffNumber(arr1, arr2):
    diff=0
    for i in range(len(arr1)):
        for j in range(7):
            if arr1[i][j]!=arr2[i][j]:
                diff+=1
    return diff

ans=0
curX=change_to_arr(X)
for num in range(1, N+1):
    numArr=change_to_arr(num)
    diff=diffNumber(curX, numArr)
    if 1<=diff<=P:
        ans+=1

print(ans)
  •  ๊ฐ ์ˆ˜๋ณ„๋กœ ๋””์Šคํ”Œ๋ ˆ์ด์˜ ์ƒํƒœ๋ฅผ numbers ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.

  • ๋‚˜์˜ ๊ฒฝ์šฐ, ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ฐ ์ˆ˜(0~9)๋ฅผ ์ธ๋ฑ์Šค๋ณ„๋กœ ๊บผ์ ธ์žˆ๋Š” ๋ถ€๋ถ„(Fasle), ์ผœ์ ธ์žˆ๋Š” ๋ถ€๋ถ„(True)์œผ๋กœ ๋‚˜ํƒ€๋ƒˆ๋‹ค.
  •  change_to_arr ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ •์ˆ˜ํ˜• ์ˆซ์ž๋ฅผ K ์ž๋ฆฌ์˜ LED ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ–ˆ๋‹ค.
  • change_to_arr ํ•จ์ˆ˜์—์„œ ์ฃผ์˜ํ•  ์ ์€ 500์ด๋‚˜ 410๊ณผ ๊ฐ™์€ ๋งˆ์ง€๋ง‰ ์ˆ˜๊ฐ€ 0์ธ ์ˆซ์ž๋Š” mod๊ฐ€ 0๋ณด๋‹ค ํด ๋™์•ˆ ๋ฐ˜๋ณต๋˜๋Š” while๋ฌธ์„ ๋ชจ๋“  ์ž๋ฆฌ ์ˆ˜๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ”๊พธ์ง€ ๋ชปํ–ˆ์„ ๋•Œ ๋น ์ ธ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. 
  • ๊ทธ๋ž˜์„œ exp๊ฐ€ 0 ์ด์ƒ์ธ ์ƒํƒœ๋กœ ์ฒซ while๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ฌ ๊ฒฝ์šฐ, exp๊ฐ€ 0 ์ด์ƒ์ผ ๋™์•ˆ cur ๋ฐฐ์—ด์— numbers[0]์„ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  exp๋ฅผ -1ํ•ด์ฃผ๋Š” while๋ฌธ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. (์ฒซ๋ฒˆ์งธ while ์กฐ๊ฑด์‹์„ exp๊ฐ€ 0 ์ด์ƒ์ผ ๋•Œ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒŒ ๋” ๊น”๋”ํ–ˆ์„ ๊ฒƒ ๊ฐ™๊ธด ํ•˜๋‹ค ใ…Žใ…Ž)
  • ์ฒซ ๋ฒˆ์งธ๋กœ, ํ˜„์žฌ ์ธต์ธ X๋ฅผ change_to_arr ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐฐ์—ด๋กœ ๋ฐ”๊พผ ๋’ค์—์„œ curX ๋ณ€์ˆ˜์— ์ €์žฅํ–ˆ๋‹ค. 
  • ๊ทธ๋ฆฌ๊ณ  1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ change_to_arr๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐฐ์—ด๋กœ ๋ฐ”๊พผ ํ›„์— numArr ๋ณ€์ˆ˜์— ์ €์žฅํ–ˆ๋‹ค.
  • ๊ฐ ๋ฐ˜๋ณต๋ฌธ์—์„œ diffNumber๋ฅผ ์ด์šฉํ•ด์„œ curX์™€ numArr์˜ ๊ฐ’์ด ๋‹ค๋ฅธ ์œ„์น˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ณ , ๋งŒ์•ฝ ์ด ๋‹ค๋ฅธ ์œ„์น˜์˜ ๊ฐœ์ˆ˜๊ฐ€ 1 ์ด์ƒ P ์ดํ•˜์ธ ์ˆ˜๋ผ๋ฉด ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ans+=1 ํ•ด์ค€๋‹ค.
  • ans๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.