We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1107๋ฒˆ: ๋ฆฌ๋ชจ์ฝ˜ - ํŒŒ์ด์ฌ

Redddy 2022. 6. 10. 19:29

๐Ÿ”ˆ ๋ฌธ์ œ

์ˆ˜๋นˆ์ด๋Š” TV๋ฅผ ๋ณด๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ์ฑ„๋„์„ ๋Œ๋ฆฌ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ๋ฒ„ํŠผ์„ ๋„ˆ๋ฌด ์„ธ๊ฒŒ ๋ˆ„๋ฅด๋Š” ๋ฐ”๋žŒ์—, ์ผ๋ถ€ ์ˆซ์ž ๋ฒ„ํŠผ์ด ๊ณ ์žฅ ๋‚ฌ๋‹ค.
๋ฆฌ๋ชจ์ปจ์—๋Š” ๋ฒ„ํŠผ์ด 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ˆซ์ž, +์™€ -๊ฐ€ ์žˆ๋‹ค. +๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” ์ฑ„๋„์—์„œ +1๋œ ์ฑ„๋„๋กœ ์ด๋™ํ•˜๊ณ , -๋ฅผ ๋ˆ„๋ฅด๋ฉด -1๋œ ์ฑ„๋„๋กœ ์ด๋™ํ•œ๋‹ค. ์ฑ„๋„ 0์—์„œ -๋ฅผ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ์—๋Š” ์ฑ„๋„์ด ๋ณ€ํ•˜์ง€ ์•Š๊ณ , ์ฑ„๋„์€ ๋ฌดํ•œ๋Œ€ ๋งŒํผ ์žˆ๋‹ค.
์ˆ˜๋นˆ์ด๊ฐ€ ์ง€๊ธˆ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ฑ„๋„์€ N์ด๋‹ค. ์–ด๋–ค ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ๋Š”์ง€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฑ„๋„ N์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฒ„ํŠผ์„ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๋ˆŒ๋Ÿฌ์•ผํ•˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. 
์ˆ˜๋นˆ์ด๊ฐ€ ์ง€๊ธˆ ๋ณด๊ณ  ์žˆ๋Š” ์ฑ„๋„์€ 100๋ฒˆ์ด๋‹ค.

 

๐Ÿ“์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ฑ„๋„ N (0 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค.  ๋‘˜์งธ ์ค„์—๋Š” ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์˜ ๊ฐœ์ˆ˜ M (0 ≤ M ≤ 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์…‹์งธ ์ค„์—๋Š” ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ™์€ ๋ฒ„ํŠผ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

 

๐Ÿ“‘์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ฑ„๋„ N์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„ํŠผ์„ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๋ˆŒ๋Ÿฌ์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ•ด์„

์ฒ˜์Œ์—๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น๋‚˜ DFS๋กœ ํ’€์–ด์•ผํ•˜๋‚˜ ์ž ๊น ์ƒ๊ฐํ•˜์˜€๋‹ค๊ฐ€, ๋ธŒ๋ฃจํŠธํฌ์Šค๋กœ ํ’€ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์•˜๋‹ค. ๊ทธ๋ž˜์„œ ์–ด๋–ค ์‹์œผ๋กœ ๋ธŒ๋ฃจํŠธํฌ์Šค๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ณ ๋ฏผํ•ด๋ณด์•˜๋‹ค. 0๋ถ€ํ„ฐ 500000๋ฒˆ ์ฑ„๋„(๊ณ ์žฅ๋‚œ ์ฑ„๋„๋ฒ„ํŠผ์€ ์ œ์™ธ)์— ์žˆ์„ ๋•Œ n๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€!!! ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋จผ์ € ๋– ์˜ฌ๋ž๋‹ค. ๊ทธ๋ž˜์„œ ์ด ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ ๋ฐฑํŠธ๋ž˜ํ‚น์ด ๋‚˜์˜จ ๊ฒƒ์ด์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ „๋ถ€ ๊ณ„์‚ฐํ•˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„๊ฐ€ ๋ฌด์‹œ๋ฌด์‹œํ•˜๋‹ค.

์ƒˆ๋กœ ์ƒ๊ฐํ•ด๋‚ธ ๋ฐฉ๋ฒ•์€ n์—์„œ +1์„ ํ•˜๊ฑฐ๋‚˜ -1์„ ํ•˜์—ฌ 0๋ถ€ํ„ฐ 500000(๊ณ ์žฅ๋‚œ ์ฑ„๋„๋ฒ„ํŠผ ์ œ์™ธ)๋กœ ๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค. ์ฐพ์œผ๋ฉด ๊ทธ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. 

์„ฌ์„ธํ•˜๊ฒŒ ์ฒดํฌํ•ด์ค˜์•ผ ํ•  ๊ฒƒ์ด ์žˆ๋Š”๋ฐ, ์‹œ์ž‘ ์œ„์น˜๋Š” 100์ด๋ผ๋Š” ์ ๊ณผ ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์—†์„ ๊ฒฝ์šฐ input ์„ ๋ฐ›์ง€ ์•Š๋Š” ์ ์ด๋‹ค. 

 

๐Ÿ“– ํ’€์ด

candi ๋ผ๋Š” ๋ฆฌ์ŠคํŠธ์— ํ›„๋ณด๊ตฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด ๋„ฃ์€ ๋‹ค์Œ ์ตœ์†Œ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ์—ˆ๋‹ค. ์ดˆ๊ธฐ ๋ฆฌ์ŠคํŠธ์—๋Š” ํ˜„์žฌ ์œ„์น˜์—์„œ ์˜ค๋กœ์ง€ + ๋˜๋Š” - ์œผ๋กœ๋งŒ ์›€์ง์ธ ๊ฒฝ์šฐ๋ฅผ ์ €์žฅํ•˜์˜€๋‹ค. (abs(n-now))

๋งŒ์•ฝ ๊ฐ€๊ณ ์ž ํ•˜๋Š” ๊ณณ์ด 100์ด๋ผ๋ฉด ์›€์ง์ด์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒฝ์šฐ์ด๊ธฐ์— candi ๋ฆฌ์ŠคํŠธ์— 0์„ ๋„ฃ๋Š”๋‹ค.
๋งŒ์•ฝ ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์—†๋‹ค๋ฉด ๋ฐ”๋กœ ์ฑ„๋„์„ ๋ˆŒ๋Ÿฌ์„œ ์›€์ง์ด๋ฉด ๋˜๋‹ˆ๊นŒ ์›€์ง์ด๊ณ ์žํ•˜๋Š” ์ฑ„๋„์˜ ๊ธธ์ด(๋ˆ„๋ฅธ๋ฒ„ํŠผ์˜ ์ˆ˜)๋ฅผ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๋Š”๋‹ค.
๋งŒ์•ฝ ๋ชจ๋“  ์ˆซ์ž๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ๋‹ค๋ฉด, ์ด๋™์€ + ๋˜๋Š” - ๋กœ ๋ฐ–์— ํ•˜์ง€ ๋ชปํ•˜๋‹ˆ input๋งŒ ๋ฐ›๊ณ  ๋„˜์–ด๊ฐ„๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ์ฒ˜์Œ์— ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

์œ„์— ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋ธŒ๋ฃจํŠธํƒ์ƒ‰ ์‹œ์ž‘์ด๋‹ท!
์‚ฌ์‹ค ํ•˜๋‚˜ ๋” ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋‚จ์•˜๋‹ค. ๊ฐ€๊ณ ์ž ํ•˜๋Š” ์ฑ„๋„์ด ํ•œ์ž๋ฆฌ ์ผ๋•Œ ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด 1๋ฒˆ๋งŒ์— ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— 1์„ ๋ฆฌ์ŠคํŠธ์— ๋‹ด์•„ ์ฃผ์—ˆ๋‹ค.
๋ธŒ๋ฃจํŠธํƒ์ƒ‰์€ 0๋ถ€ํ„ฐ 500000๊นŒ์ง€ i๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•  ๋•Œ n-i ๋˜๋Š” n+i์ด ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์ง€ ์•Š๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ ๊ฒฝ์šฐ ๋ˆ„๋ฅธ ๋ฒ„ํŠผ์˜ ์ˆ˜๋ฅผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค. n-i๊ณผ n+i ๋ชจ๋‘ ํ•˜๋‚˜์”ฉ ํ›„๋ณด๊ตฐ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์—ˆ๋‹ค. 

 

๐Ÿ’ป ์ฝ”๋“œ 1

# ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ
import sys
input = sys.stdin.readline

n = int(input()) # ์ด๋™ํ•˜๊ณ ํ”ˆ ์ฑ„๋„
m = int(input()) # ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์˜ ์ˆ˜
now = 100 # ํ˜„์žฌ ์œ„์น˜
candi = [abs(n-now)] # ์˜ค์ง + ๋˜๋Š” - ๋งŒ์œผ๋กœ ์›€์ง์ธ ๊ฒฝ์šฐ ์ €์žฅ
if n == 100: # ์ด๋™ํ•˜๊ณ ์ž ํ•˜๋Š” ์œ„์น˜๊ฐ€ 100์ด๋ผ๋ฉด ๊ฐ€๋งŒํžˆ ์žˆ์Œ, 0๋ฒˆ ๋ˆ„๋ฆ„
    if m != 0:
        map(int,input().rstrip().split())
    candi.append(0)
elif m == 0: # ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์—†๋‹ค๋ฉด ๋ฐ”๋กœ ์ฑ„๋„ ๋ˆ„๋ฆ„, ์ฑ„๋„์˜ ๊ธธ์ด๋ฒˆ ๋งŒํผ ๋ˆ„๋ฆ„
    candi.append(len(str(n)))
elif m == 10: # ์ „๋ถ€ ๊ณ ์žฅ๋‚ฌ๋‹ค๋ฉด ์˜ค์ง +, -๋งŒ์œผ๋กœ ์›€์ง์ž„, 7๋ฒˆ์งธ ์ค„์—์„œ ์ฒ˜๋ฆฌํ•ด์คŒ
    map(int,input().rstrip().split())
else:
    breakup = set(map(int,input().split()))
    if len(str(n)) == 1 and n not in breakup: # ๋ฒ„ํŠผ ํ•˜๋‚˜๋งŒ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Œ, 1๋ฒˆ ๋ˆ„๋ฆ„
        candi.append(1)
        pass

    left = False # -๋ฒ„ํŠผ ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜๋งŒ ๋‹ด๊ธฐ ์œ„ํ•œ ๋ถˆ๋ฆฌ์•ˆ
    right = False # + ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜๋งŒ ๋‹ด๊ธฐ ์œ„ํ•œ ๋ถˆ๋ฆฌ์•ˆ
    for i in range(500001):
        plus = set(map(int,str(n+i))) # ํ”Œ๋Ÿฌ์Šค๋ฒ„ํŠผ ๋ˆ„๋ฆ„
        # ์ง‘ํ•ฉ์˜ ์ฐจ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.
        # (ํ˜„์žฌ ์ง‘ํ•ฉ)๊ณผ (ํ˜„์žฌ ์ง‘ํ•ฉ ๊ณ ์žฅ๋‚œ ํ‚ค)์˜ ์ฐจ์ง‘ํ•ฉ์˜ ์ฐจ์ด๊ฐ€ ์—†๋‹ค๋ฉด
        if len(plus) == len(plus-breakup): 
            candi.append(len(str(n+i))+i)  # ๋ฒ„ํŠผ ๋ˆ„๋ฅธ ํšŸ์ˆ˜ ์บ”๋””์— ์ถ”๊ฐ€
            right = True # ์ด์ชฝ ๊ฒฝ๋กœ๋Š” ์™”๋‹ค๋Š” ๊ฒƒ์„ ์ฒดํฌ
        if 0 <= n-i: # ์ฑ„๋„์ด ์Œ์ˆ˜์ธ ๊ฒฝ์šฐ๋Š” ์—†์Œ 
            minus = set(map(int,str(n-i)))
            if len(minus) == len(minus-breakup):
                candi.append(len(str(n-i))+i)
                left = True
        if left and right: # +ํ‚ค๋งŒ์œผ๋กœ, - ํ‚ค๋งŒ์œผ๋กœ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ ๋ชจ๋‘ ํ•œ๋ฒˆ์”ฉ ์ถ”๊ฐ€ํ•ด์คฌ์„ ๋ธŒ๋ฃจํŠธํฌ์Šค๋ฉˆ์ถค
            break         

print(min(candi)) # ํ›„๋ณด๊ตฐ์˜ ์ตœ์†Œ๊ฐ’ ์ถœ๋ ฅ

 

๐Ÿ’ป ์ฝ”๋“œ 2

# ๋‘๋ฒˆ์งธ ์ฝ”๋“œ
import sys
input = sys.stdin.readline

n = int(input())
m = int(input())
now = 100
candi = [abs(n-now)]
if n == 100:
    if m != 0:
        map(int,input().rstrip().split())
    candi.append(0)
elif m == 0:
    candi.append(len(str(n)))
elif m == 10:
    map(int,input().rstrip().split())

else:
    breakup = set(map(int,input().split()))
    if len(str(n)) == 1 and n not in breakup:
        candi.append(1)
    else:
        left = False
        right = False
        for i in range(500001):
            plus = set(map(int,str(n+i)))
            if len(plus) == len(plus-breakup) and not right:
                candi.append(len(str(n+i))+i)
                right = True
            if 0 <= n-i and not left:
                minus = set(map(int,str(n-i)))
                if len(minus) == len(minus-breakup):
                    candi.append(len(str(n-i))+i)
                    left = True
            if left and right:
                break         

print(min(candi))

 

์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ์™€ ๋‘๋ฒˆ์งธ ์ฝ”๋“œ์˜ ์ฐจ์ด๋Š” ์ฒซ๋ฒˆ์งธ else ํŒŒํŠธ์— ์žˆ๋‹ค. 

๋งŒ์•ฝ right ์— ๊ฒฝ์šฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค๋ฉด, left๋ฅผ ์ฐพ๋Š” ๋™์•ˆ์€ right ํŒŒํŠธ ์—ฐ์‚ฐ์„ ํ•˜์ง€ ์•Š๊ณ , ๋ฐ˜๋Œ€๋กœ letf๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค๋ฉด right ๋ฅผ ์ฐพ๋Š” ๋™์•ˆ left ์—ฐ์‚ฐ์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋‘๋ฒˆ์งธ ์ฝ”๋“œ์ด๋‹ค.

๊ณต๊ฐ„๋ณต์žก๋„์˜ ์ฐจ์ด๊ฐ€ ๊ฝค ๋‚œ๋‹ค.

์•„๋ž˜๊ฐ€ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ, ์œ„์—๊ฐ€ ๋‘๋ฒˆ์งธ ์ฝ”๋“œ์ด๋‹ค. right๋ฅผ ํ•œ๋ฒˆ ๋„ฃ์—ˆ์œผ๋ฉด ๋”์ด์ƒ right๋Š” ๋„ฃ์ง€ ์•Š๊ณ , left๋ฅผ ํ•œ๋ฒˆ ๋„ฃ์—ˆ์œผ๋ฉด ๋”์ด์ƒ left๋ฅผ ๋„ฃ์ง€ ์•Š๊ธฐ์— ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰ ๋‘๋ฒˆ์งธ ์ฝ”๋“œ์˜ ํ›„๋ณด๊ตฐ ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ์˜ ๊ฐฏ์ˆ˜๋Š” ์ตœ๋Œ€ 3๊ฐœ์ด๋‹ค.

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ : ๋ฆฌ๋ชจ์ปจ

 

1107๋ฒˆ: ๋ฆฌ๋ชจ์ปจ

์ฒซ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ฑ„๋„ N (0 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค.  ๋‘˜์งธ ์ค„์—๋Š” ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์˜ ๊ฐœ์ˆ˜ M (0 ≤ M ≤ 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์…‹์งธ ์ค„์—๋Š” ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ

www.acmicpc.net

ํŒŒ์ด์ฌ