[Python] G5_1107_๋ฆฌ๋ชจ์ปจ ๐Ÿ“บ

Sangho Hanยท2023๋…„ 6์›” 13์ผ
0
post-thumbnail

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

๋ฌธ์ œ

์ˆ˜๋นˆ์ด๋Š” TV๋ฅผ ๋ณด๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ์ฑ„๋„์„ ๋Œ๋ฆฌ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ๋ฒ„ํŠผ์„ ๋„ˆ๋ฌด ์„ธ๊ฒŒ ๋ˆ„๋ฅด๋Š” ๋ฐ”๋žŒ์—, ์ผ๋ถ€ ์ˆซ์ž ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ๋‹ค.

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

์ˆ˜๋นˆ์ด๊ฐ€ ์ง€๊ธˆ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ฑ„๋„์€ N์ด๋‹ค. ์–ด๋–ค ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ๋Š”์ง€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฑ„๋„ N์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฒ„ํŠผ์„ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๋ˆŒ๋Ÿฌ์•ผํ•˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ˆ˜๋นˆ์ด๊ฐ€ ์ง€๊ธˆ ๋ณด๊ณ  ์žˆ๋Š” ์ฑ„๋„์€ 100๋ฒˆ์ด๋‹ค.

์ž…๋ ฅ

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

์ถœ๋ ฅ

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

์˜ˆ์ œ

์กฐ๊ฑด

  • ์‹œ๊ฐ„ ์ œํ•œ: 2์ดˆ
  • ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ: 256MB

์ฝ”๋“œ

from itertools import product
import sys
input = sys.stdin.readline

# ์ž…๋ ฅ
go_num = input().rstrip()
out_cnt = int(input())
# ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์—†๋Š” ๊ฒฝ์šฐ (=10๊ฐœ ๋ชจ๋‘ ๋™์ž‘)
if out_cnt == 0:
    result = min(len(go_num), abs(int(go_num) - 100))
    print(result)
    exit(0)
# ๋ชจ๋“  ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ์„ ๊ฒฝ์šฐ
elif out_cnt == 10:
    a = set(input().rstrip().split())
    print(abs(int(go_num) - 100))
    exit(0)

out_lst = set(input().rstrip().split())
lst = set(str(i) for i in range(10))
lst -= out_lst  # ์ฐจ์ง‘ํ•ฉ์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฒ„ํŠผ์„ ํŒŒ์•…ํ•จ
up_down = abs(int(go_num) - 100) # ์ดˆ๊ธฐ ์ฑ„๋„์ธ 100๋ฒˆ์—์„œ +- ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ
minNum = sys.maxsize

for a in range(-1,2): # ์ค‘๋ณต์ˆœ์—ด์˜ ์›์†Œ ๊ฐ€์ง€์ˆ˜๋ฅผ 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ํŒŒ์•…ํ•จ
    if a == -1:
        if '0' in lst or len(go_num) == 1:
            continue
    for i in product(lst,repeat=len(go_num)+a):
        num = ''
        for j in i:
            num += j
        
        diff = abs(int(go_num) - int(num))  # ๊ฐ€๊ณ ์ž ํ•˜๋Š” ์ฑ„๋„๊ณผ์˜ ์ฐจ์ด
        click = len(str(int(num)))  # ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํšŸ์ˆ˜ 
        diff += click
        if minNum > diff:
            minNum = diff

# ์ถœ๋ ฅ
result = min(minNum, up_down)
print(result)
  1. out_cnt ๊ฐ€ 0 ์ผ ๊ฒฝ์šฐ์™€ 10 ์ผ ๊ฒฝ์šฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ ๋ คํ•œ๋‹ค.
  • ๋ชจ๋‘ ๋™์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋„, ๋ฒ„ํŠผ์„ ์ง์ ‘ ๋ˆŒ๋Ÿฌ์„œ ๊ฐ€๋Š” ๊ฒƒ๋ณด๋‹ค ์ดˆ๊ธฐ ์ฑ„๋„ 100 ๋ฒˆ์—์„œ +,- ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • Ex) ์ฑ„๋„ 101 ์œผ๋กœ ๊ฐ€๊ณ ์žํ•œ๋‹ค๋ฉด, + ๋กœ 1๋ฒˆ์ด๋ฉด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, 101 ์„ ์ง์ ‘ ๋ˆ„๋ฅธ๋‹ค๋ฉด 3๋ฒˆ์˜ ๋™์ž‘์ด ํ•„์š”ํ•˜๋‹ค.

  • ๋ชจ๋“  ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ๋‹ค๋ฉด, +,- ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฐ–์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

  1. ์ฐจ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ lst ์— ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฒ„ํŠผ๋งŒ ๋‚จ๊ฒจ์ค€๋‹ค.
  1. ์ดˆ๊ธฐ ์ฑ„๋„ 100 ๋ฒˆ์—์„œ +,- ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์ธ up_down ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.
  1. go_num ์˜ ๊ธธ์ด์— -1,0,+1 ํ•œ ์ค‘๋ณต์ˆœ์—ด๋„ ๊ณ ๋ คํ•ด์ค€๋‹ค.
  • 0 ๋ฒˆ ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ๊ณ , ๊ฐ€๊ณ ์žํ•˜๋Š” ์ฑ„๋„์˜ ์ˆซ์ž๊ฐ€ ํ•œ์ž๋ฆฌ ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, -1 ์˜ ๊ฒฝ์šฐ๋„ ๊ณ ๋ คํ•œ๋‹ค.

  • 0 ๋ฒˆ ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๊ตณ์ด ๊ณ ๋ คํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ž๋™์ ์œผ๋กœ ์—ฌ๋Ÿฌ ์ž๋ฆฌ์ˆ˜๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • go_num ์ด 1555์ด๊ณ , ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ์ด 2,8 ๋ฟ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

  • ๋งŒ์•ฝ go_num ์˜ ๊ธธ์ด์ธ 4๋กœ๋งŒ ์ค‘๋ณต์ˆœ์—ด์„ ๋งŒ๋“ ๋‹ค๋ฉด, ๊ทผ์‚ฌ์น˜๋Š” 2222 ๊ฐ€ ๋‚˜์™€ abs(1555-2222) + len(num) ์œผ๋กœ 671์ด๋ผ๋Š” ๋‹ต์ด ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.

  • ํ•˜์ง€๋งŒ go_num ์˜ ๊ธธ์ด๋ณด๋‹ค ํ•˜๋‚˜ ์ž‘์€ 3์œผ๋กœ ์ค‘๋ณต์ˆœ์—ด์„ ๋งŒ๋“ ๋‹ค๋ฉด, ๊ทผ์‚ฌ์น˜๋Š” 888 ์ด ๋‚˜์™€ abs(1555-888) + len(num) ์œผ๋กœ 670์ด๋ผ๋Š” ๋‹ต์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

  • ๋™์ผํ•œ ์ด์œ ๋กœ go_num ์˜ ๊ธธ์ด๋ณด๋‹ค ํ•˜๋‚˜ ํฐ ์ˆซ์ž๋กœ๋„ ์ค‘๋ณต์ˆœ์—ด์„ ๋งŒ๋“ค์–ด ํŒŒ์•…ํ•ด์ค€๋‹ค.

  1. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ๋‚˜์˜จ diff ๊ฐ’์— ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํšŸ์ˆ˜์ธ click ์„ ๋”ํ•ด ์ตœ์ข…์ ์œผ๋กœ minNum ์„ ์•Œ์•„๋‚ธ๋‹ค.
  1. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘” up_down ๋ณ€์ˆ˜์™€ ๋น„๊ต๋ฅผ ํ•œ ํ›„์— ๋” ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

๋А๋‚€ ์  & ๋ฐฐ์šด ์ 

  1. ์ƒ๊ฐ๋ณด๋‹ค ๊ณ ๋ คํ•ด์•ผํ•  ์ ๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๊ฝค๋‚˜ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋˜ ๋ฌธ์ œ์ด๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์˜ฌ๋ ค์ค€ ๋ฐ˜๋ก€๋“ค์ด ์—†์—ˆ๋‹ค๋ฉด ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.. ์ด๋ฒˆ์—๋Š” ๋ฐ˜๋ก€๋ฅผ ๋‹ค ๋„ฃ์–ด๋ณด๋ฉฐ ์ˆ˜์ •์„ ํ–ˆ์ง€๋งŒ ๋งŒ์•ฝ ์‹ค์ „์ด๋ผ๋ฉด ๋‚ด๊ฐ€ ์ง์ ‘ํ•ด์•ผ ํ• ํ…๋ฐ ์‰ฝ์ง€ ์•Š์„ ๋“ฏํ•˜๋‹ค. ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๋ฐ˜๋ก€๋ฅผ ์ง์ ‘ ์ฐพ์•„์„œ ํ•ด๊ฒฐํ•ด๋ณด๋Š” ์—ฐ์Šต๋„ ํ•ด๋ณด์•„์•ผ๊ฒ ๋‹ค!

  2. ๋ธŒ๋ฃจํŠธํฌ์Šค ๋ฌธ์ œ๋ผ ๊ทธ๋Ÿฐ์ง€ ์—ฃ์ง€ ์ผ€์ด์Šค๋“ค์ด ์ƒ๋‹นํžˆ ๋งŽ์•˜๋‹ค.. ๊ทธ๋ž˜๋„ ์ˆ˜์ • ๋์— ํ•ด๊ฒฐ์„ ํ–ˆ๋‹ค๋Š” ์ ์—์„œ ๋ฟŒ๋“ฏํ•จ์„ ๋А๋‚€๋‹ค!

profile
์•ˆ๋…•ํ•˜์„ธ์š”. ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž, ํ•œ์ƒํ˜ธ์ž…๋‹ˆ๋‹ค.

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

Powered by GraphCDN, the GraphQL CDN