๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] #2529 ๋ถ€๋“ฑํ˜ธ (Python)

๋ถ€๋“ฑํ˜ธ

๋ฌธ์ œ

  • ์ž…๋ ฅ : ๋ถ€๋“ฑํ˜ธ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ k( 2 ≤ k ≤ 9)์™€ k๊ฐœ์˜ ๋ถ€๋“ฑํ˜ธ ๊ธฐํ˜ธ
  • ์ถœ๋ ฅ : ์ œ์‹œ๋œ ๋ถ€๋“ฑํ˜ธ ๊ด€๊ณ„๋ฅผ ๋งŒ์กฑํ•˜๋Š” k+1 ์ž๋ฆฌ์˜ ์ตœ๋Œ€, ์ตœ์†Œ ์ •์ˆ˜

๋ถ€๋“ฑํ˜ธ์˜ ๊ฐฏ์ˆ˜์™€ ๋ถ€๋“ฑํ˜ธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ๋ถ€๋“ฑํ˜ธ์— ๋งž๊ฒŒ ์–‘ ์˜†์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž(0~9)๊ฐ€ ์กด์žฌํ•œ๋‹ค.(๋‹จ, ๋ชจ๋“  ์ˆซ์ž๋Š” ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค.)
์ฃผ์–ด์ง„ ๋ชจ๋“  ๋ถ€๋“ฑํ˜ธ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ˆซ์ž๋“ค์„ ์ฐพ๊ณ , ๋ถ€๋“ฑํ˜ธ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์ •์ˆ˜ํ•˜๋‚˜๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ๊ทธ๋“ค ์ค‘ ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผํ•œ๋‹ค.

์ž…๋ ฅ

2
< >

์ถœ๋ ฅ

897
021

์šฉ์–ด ์ •๋ฆฌ - ๋ฐฑํŠธ๋ž˜ํ‚น

  • ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ค‘์—์„œ ํŠน์ •ํ•œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ๋งŒ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ
  • ๋‹ต์ด ๋  ๋งŒํ•œ์ง€ ํŒ๋‹จํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํƒ์ƒ‰์„ ์ค‘๋‹จ
  • ์ฃผ๋กœ ๋ฌธ์ œ ํ’€์ด์—์„œ๋Š” DFS ๋“ฑ์œผ๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ณผ์ •์—์„œ, ์กฐ๊ฑด๋ฌธ์œผ๋กœ ๋‹ต์ด ์ ˆ๋Œ€๋กœ ๋  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์„ ์ •์˜ํ•˜๊ณ , ๊ทธ๋Ÿฌํ•œ ์ƒํ™ฉ์ผ ๊ฒฝ์šฐ์—๋Š” ํƒ์ƒ‰์„ ์ค‘์ง€์‹œํ‚จ ๋’ค ๊ทธ ์ด์ „์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๋‹ค์‹œ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋„๋ก ๊ตฌํ˜„

ํ’€์ด ์ „๋žต

  • ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ธŒ๋ฃจํŠธ ํฌ์Šค(๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์š”๊ตฌ์กฐ๊ฑด์— ์ถฉ์กฑ๋˜๋Š” ๊ฒฐ๊ณผ๋งŒ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹)๋กœ ๊ตฌํ˜„
  • ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋ถ€๋“ฑํ˜ธ ์ฒดํฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ•˜์—ฌ ์‹œ๊ฐ„์„ ๋‹จ์ถ•
  1. ํ•˜๋‚˜์˜ ์™„์„ฑ๋œ ์ •์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๊ธธ์ด(N)+1 ๋งŒํผ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. (์ˆซ์ž ๊ฐœ์ˆ˜ = ๋ถ€๋“ฑํ˜ธ ๊ฐœ์ˆ˜+1)
    ์žฌ๊ท€ ํ•จ์ˆ˜ ์ข…๋ฃŒ ์กฐ๊ฑด : ์ˆซ์ž ๊ฐœ์ˆ˜(๊ธธ์ด) == N+1
  2. ์ˆ˜๋ฅผ ์ค‘๋ณตํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, check ๋ฐฐ์—ด์„ ๋ณ„๋„๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.
  3. ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์—, ๋‹ค์Œ ์ˆซ์ž๊ฐ€ ๋ถ€๋“ฑ์‹์— ๋งž๋Š”์ง€ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค.
    ex) ์ฃผ์–ด์ง„ ๋ถ€๋“ฑํ˜ธ๊ฐ€ < > > ๋ผ๋ฉด, 0 < 3 > 2 > 1์€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    ํ•˜์ง€๋งŒ 3 < 2 > 1 > 0์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ, 3 < 2๋ถ€ํ„ฐ ํ‹€๋ฆฐ ๋ถ€๋“ฑ์‹์ด๋ฏ€๋กœ, ์ด ๋’ค๋กœ๋Š” ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  4. ์žฌ๊ท€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ๋ถ€๋ฅด๋ฏ€๋กœ, ์ •๋‹ต์˜ ์ตœ์†Ÿ๊ฐ’์€ ์ฒ˜์Œ ํ˜ธ์ถœ๋œ ๊ฐ’์ด๋ฉฐ, ์ตœ๋Œ“๊ฐ’์€ ๋งˆ์ง€๋ง‰์— ํ˜ธ์ถœ๋œ ๊ฐ’์ด๋‹ค.

Solutions

solution time info
[solution1.py] 224ms -
n = int(input()) # ๋ถ€๋“ฑํ˜ธ ๊ฐœ์ˆ˜
sign = input().split() #๋ถ€๋“ฑํ˜ธ
check = [False]*10 # 0~9
mx, mn = "", ""

# ๋ถ€๋“ฑํ˜ธ๊ฐ€ ์„ฑ๋ฆฝํ•˜๋Š” ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
def possible(i,j,k):
    if k == '<':
        return i<j
    if k == '>':
        return i>j
    return True

def solve(cnt, z):
    global mx, mn
    if cnt == n+1:
        if not len(mn): # mn์ด ๋น„์›Œ์ ธ ์žˆ์œผ๋ฉด ์ตœ์†Ÿ๊ฐ’์— z ๋„ฃ๊ธฐ
            mn = z
        else: # mn์— ๊ฐ’์ด ์žˆ์œผ๋ฉด ์ตœ๋Œ“๊ฐ’์— ๋„ฃ๊ธฐ
            mx = z
        return
    for i in range(10):# 0๋ถ€ํ„ฐ 9๊นŒ์ง€
        if not check[i]: # check[i]์ด false์ด๋ฉด(์ค‘๋ณต ๋ฐฉ์ง€)
            if cnt==0 or possible(z[-1], str(i), sign[cnt-1]):
                check[i]=True
                solve(cnt+1, z+str(i)) #์žฌ๊ท€ํ•จ์ˆ˜
                # ๋งŒ์•ฝ 0 > ? ์ผ ๊ฒฝ์šฐ ?์— ์˜ฌ ์ˆซ์ž๊ฐ€ ์—†์œผ๋ฏ€๋กœ solveํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๊ณ  check[0]์ด false๊ฐ€ ๋˜๊ณ  check[1]๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค.
                check[i]=False


solve(0, "") #solve ํ•จ์ˆ˜ ๋Œ๋ฆฌ๊ธฐ
print(mx)
print(mn)

Reference

https://rebas.kr/755