ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๐Ÿšฉ ๋ธŒ๋ฃจํŠธํฌ์Šค

 

thinking

์•„์•… ์ง„์งœ ์ด๊ฑฐ ๊ณ„์† ํ‹€๋ ค์„œ ๊ตฌ๊ธ€๋งํ•ด๋ดค๋‹ค

๋‚˜๋Š” N์˜ ์ตœ๋Œ€ ๋ฒ”์œ„๊ฐ€ 500,000์ด๋ผ 500000๊นŒ์ง€๋งŒ ์ฒดํ‚นํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์€ ๋‹ค range๋ฅผ 100๋งŒ์œผ๋กœ ์žก๋Š”๊ฒŒ ์ง„์งœ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ”๋‹ค. 

50๋งŒ ์ฑ„๋„๊นŒ์ง€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— 50๋งŒ๋ณด๋‹ค ํฌ๋ฉด์„œ ๋ชจ๋“  ์ˆซ์ž์˜ ๊ฒฝ์šฐ๋ฅผ ๊ฑฐ์น˜๋Š” 100๋งŒ๊นŒ์ง€๋ฅผ ๋ฒ”์œ„๋กœ ์žก์•˜๋‹ค๋Š”๋ฐ ๋„๋Œ€์ฒด ์ด๊ฒŒ ๋ญ”๋ง์ด์•ผ ๐Ÿ˜‘

๋ญ”๋ง์ด๋ƒ๋ฉด ๋‚ด๊ฐ€ ์ด๋™ํ•˜๊ณ  ์‹ถ์€ ์ฑ„๋„์ด N(0~500,000) ๋ฒˆ์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, 0๋ฒˆ๋ถ€ํ„ฐ ++๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์™€ 999,999๋ฒˆ๋ถ€ํ„ฐ --๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ(๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ์ด 9๋งŒ ์žˆ์œผ๋ฉด 9๋ฐ–์— ๋ชป๋ˆ„๋ฅด๊ธฐ ๋•Œ๋ฌธ)๋ฅผ ์ „๋ถ€ ๊ณ ๋ คํ•œ ๊ฒƒ์ด์—ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ์ˆซ์ž๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ „๋ถ€ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ๋งŒ ์กฐ๊ฑด๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์ตœ์†Œ ๊ฐญ์„ ๊ณ„์‚ฐํ•ด์คฌ๋‹ค.

 

 

๋งž์€ ์ฝ”๋“œ (success)

N = int(input())  # ์ฑ„๋„๋ฒˆํ˜ธ
M = int(input())  # ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์˜ ๊ฐœ์ˆ˜
remote = {str(x) for x in range(10)}  # ๋ฆฌ๋ชจ์ปจ๋ฒ„ํŠผ

if M != 0:
    remote -= set(input().split())  # ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฒ„ํŠผ ๋ฝ‘์•„๋ƒ„

min_cnt = abs(100-N)  # ์ผ๋‹จ 100๊ณผ์˜ ๊ฐญ์„ ์ตœ์†Œ๋กœ ๋‘๊ณ  ๊ณ„์‚ฐ

for k in range(1000000):
    num = str(k)
    for i in range(len(num)):
        if num[i] not in remote:  # 0~999999๊นŒ์ง€์˜ ์ˆซ์ž ์ˆœํšŒํ•˜๋ฉด์„œ ๋ฆฌ๋ชจ์ปจ ๋ฒ„ํŠผ์— ์—†์œผ๋ฉด ํŒจ์“ฐ
            break
        if i == len(num)-1:  # ๋งˆ์ง€๋ง‰ ์ž๋ฆฌ์ˆ˜๊นŒ์ง€ ํ™•์ธํ–ˆ์œผ๋ฉด ์ตœ์†Œ ์นด์šดํŒ… ๊ฐฑ์‹ 
            min_cnt = min(min_cnt, abs(N-k)+len(num))

print(min_cnt)

 

 

์‹คํŒจ ์ฝ”๋“œ (Fail)

๋‚˜๋Š” ์ฒ˜์Œ์— ์ˆœํšŒ ์•ˆํ•˜๊ณ  ํ’€์—ˆ๋Š”๋ฐ ๋‚ด๊ฐ€ ์ž˜๋ชป ์ƒ๊ฐํ•œ๊ฑฐ์˜€๋‹ค.

testcase 3๋ฒˆ์„ ๋ณด๋ฉด, 500000์ผ๋•Œ 1,5๋ฒˆ๋งŒ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ์–ด์„œ '500000' ์„ ์ˆœํšŒํ•˜๋ฉฐ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ์€ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋Š” ํšŸ์ˆ˜์— ๋”ํ•˜๊ธฐ 1 ํ•ด์ฃผ๊ณ , 0์ฒ˜๋Ÿผ ๋ˆ„๋ฅผ ์ˆ˜ ์—†๋Š” ๋ฒ„ํŠผ์ด๋ฉด ๊ฐ€์žฅ ๊ฐญ์ด ์ž‘์€ 1๋ฒˆ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๊ทธ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ๊ฒฝ์šฐ ์ด ์ฝ”๋“œ๋กœ๋Š” ๋ชจ๋‘ ์ •๋‹ต์ด ๋‚˜์˜ค์ง€๋งŒ, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด N=5478์ด๊ณ  6,7,8๋ฒˆ์ด ๋ชป ๋ˆ„๋ฅด๋Š” ๋ฒ„ํŠผ์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ 5490์ผ๋•Œ๊ฐ€ ๊ฐ€์žฅ ๊ฐญ์ด ์ž‘์€๋ฐ ์ด ์ฝ”๋“œ๋กœ ํ’€๋ฉด 5459 ๋˜๋Š” 5499๊ฐ€ tmp์˜ ๊ฐ€๋Šฅ์„ฑ์ด ๋œ๋‹ค. ๊ทธ๋Ÿผ ์ตœ์†Œ๊ฐญ์ด ์•ˆ๋œ๋‹ค.

range(1000000)์„ ์ˆœํšŒํ•˜์ง€ ์•Š๊ณ  ์ด ์ฝ”๋“œ๋ฅผ ์‚ด๋ ค ํ’€์–ด๋ณด๊ณ  ์‹ถ์—ˆ์œผ๋‚˜ ์ € 90๊ณผ 78์˜ ๊ฐญ์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๋Œ๋ ค๋ณด๋Š”๊ฒŒ ๋งž๋Š”๊ฑฐ ๊ฐ™๋‹ค

N = input()  # ์ฑ„๋„๋ฒˆํ˜ธ
M = int(input())  # ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์˜ ๊ฐœ์ˆ˜
remote = {str(x) for x in range(10)}  # ๋ฆฌ๋ชจ์ปจ๋ฒ„ํŠผ

if M != 0:
    remote -= set(input().split())  # ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฒ„ํŠผ ๋ฝ‘์•„๋ƒ„

gap100 = abs(100-int(N))  # 100๊ณผ์˜ ์ฐจ์ด
min_gap = 10  # ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฒ„ํŠผ๊ณผ์˜ ์ตœ์†Œ ๊ฐญ ๊ตฌํ•  ๋ณ€์ˆ˜
cnt = 0  # ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋Š” ํšŸ์ˆ˜
tmp = ''  # ์ฑ„๋„๊ฐ„์˜ ์ฐจ์ด ๊ตฌํ•  ๋ณ€์ˆ˜
for s in N:
    if s in remote:
        tmp += '0'
        cnt += 1
    else:
        for num in remote:
            gap = abs(int(num)-int(s))
            if gap < min_gap:
                min_gap = gap
        tmp += str(min_gap)
        cnt += 1

res = min(gap100, int(tmp)+cnt)
print(res)

 

 

ํ›„๊ธฐ

์–ธ์ œ ๊ณจ๋“œ ํ•œ๋ฒˆ์— ๋งž์•„๋ณด๋‚˜ ~ ๐Ÿ˜‘

๋Œ“๊ธ€