์๊ณ ๋ฆฌ์ฆ/๊ตฌํ
[๋ฐฑ์ค 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๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ค.