• Home
  • About
    • on Weekend photo

      on Weekend

      ๐™Ž๐™ฉ๐™ช๐™™๐™ฎ๐™ž๐™ฃ๐™œ

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • ํ•„์‚ฌ
  • Projects

[๋ฐฑ์ค€] 1039 ๊ตํ™˜ (Python)

18 Apr 2021

๋ฌธ์ œ

๋ฐฑ์ค€ 1039 ๊ตํ™˜ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•  ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํžŒํŠธ 1 : BFS ๋งž๊ธด ํ•ฉ๋‹ˆ๋‹ค.
  • ํžŒํŠธ 2 : ์™„์ „ํƒ์ƒ‰๊ณผ ๋‹ค๋ฅผ ๋ฐ” ์—†์Œ.
  • ํžŒํŠธ 3 : ์‹œ๊ฐ„ ์ดˆ๊ณผ๋‚  ๊ฒƒ ๊ฐ™์€๋ฐ..? ํ•˜์‹œ๊ฒ ์ง€๋งŒ ์•ˆ๋‚ฉ๋‹ˆ๋‹ค. BFS๋กœ ์ˆœํšŒํ•˜๋ฉฐ ์™„์ „ํƒ์ƒ‰ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํ’€์ด

BFS๋กœ K๋ฒˆ์˜ ์—ฐ์‚ฐ์„ ์™„์ „ํƒ์ƒ‰ํ•ด์ค๋‹ˆ๋‹ค.

์—ฐ์‚ฐ ๊ตฌํ˜„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

16375์ธ ๊ฒฝ์šฐ์—์˜ K=1 ์—ฐ์‚ฐ

์‹œ์ž‘ ํ : 16375

while q, q์—์„œ 16375๋ฅผ ๊บผ๋‚ด์„œ ์—ฐ์‚ฐ ์‹œ์ž‘.

  1. โ€˜1โ€™์„ 6, 3, 7, 5์™€ ๋ฐ”๊พผ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.
    • Q : 61375 36175 76315 56371
  2. โ€˜6โ€™์„ 3,7,5์™€ ๋ฐ”๊พผ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.
    • Q : 61375 36175 76315 56371 13675 17365 15376
  3. โ€˜3โ€™์„ 7,5์™€ ๋ฐ”๊พผ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.
    • Q : 61375 36175 76315 56371 13675 17365 15376 16735 16573
  4. โ€˜7โ€™์„ 5์™€ ๋ฐ”๊พผ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.
    • Q : 61375 36175 76315 56371 13675 17365 15376 16735 16573 16357

๋‹จ, Q์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’์ด 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ ํ์— ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. (๊ฐ€๋ น 1111 ์ด๋ฉด ๋ฌด์˜๋ฏธํ•˜๊ฒŒ ๊ฐ™์€ ๊ฐ’๋งŒ ๋งŽ์ด ๋“ค์–ด๊ฐ€๊ฒ ์ฃ ? ๊ตณ์ด ๋„ฃ์„ ํ•„์š” ์—†์œผ๋‹ˆ ์•ˆ๋„ฃ๊ฒ ์Šต๋‹ˆ๋‹ค.)

๊ทธ๋Ÿฐ๋ฐ ์ด์ œ ๋ช‡ ๋ฒˆ ์—ฐ์‚ฐ์„ ํ–ˆ๋Š”์ง€๋ฅผ ๊ผญ ์„ธ์–ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Q์—๋Š” ๊ฒฐ๊ณผ์ˆซ์ž๊ฐ’๊ณผ, ์—ฐ์‚ฐํšŸ์ˆ˜(tempK)๋ฅผ ํ•จ๊ป˜ tuple๋กœ ๋ฌถ์–ด์„œ ๋„ฃ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. (๋‚ด๋ถ€์— ์žˆ๋Š” ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š์„ ๊ฒƒ์ด๋ฉฐ, ๋ฐ”๋€Œ์–ด์„œ๋„ ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŠœํ”Œ๋กœ ๋„ฃ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ํœด๋จผ ์—๋Ÿฌ๋กœ ์–ด๋””์„ ๊ฐ€ ๊ฐ’์ด ๋ฐ”๋€Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋‚ด๋„๋ก์š”.)

๊ทธ๋ž˜์„œ, K๋ฒˆ ์—ฐ์‚ฐ์ด ๋๋‚ฌ๋‹ค๋ฉด, K+1๋ฒˆ์งธ ์—ฐ์‚ฐ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ง์ „์— while ๋ฌธ์—์„œ ํƒˆ์ถœํ•ด์ค๋‹ˆ๋‹ค.

  • ์ •ํ™•ํžˆ๋Š” ๊ทธ๋ƒฅ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ์•„์„œ return ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ while๋ฌธ์—์„œ ํƒˆ์ถœ๋˜์—ˆ๋‹ค๋ฉด, ์ฆ‰ q๊ฐ€ ํ…… ๋น„๋Š” ์‚ฌํƒœ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์ด๋Š” K๋ฒˆ๊นŒ์ง€ ์—ฐ์‚ฐ์„ ๋ชปํ•˜๊ณ  โ€œ๋‹ค์Œ์— ๊ณ„์‚ฐํ•  ์ˆ˜๋ฅผ ๋ชป์ฐพ์€โ€ ๊ฒฝ์šฐ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (-1์„ ๋ฑ‰์–ด์•ผ ํ•˜๋Š” ์˜ˆ์™ธ ์‚ฌํ•ญ๋“ค์ด ์ด๋Ÿฐ ์ผ€์ด์Šค์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ ์‚ฌํ•ญ์œผ๋กœ ๊ณ ๋ คํ•ด์ฃผ์…”์•ผํ•˜๋Š” ์ผ€์ด์Šค๋Š” ํ•˜๋‹จ์— ์ ๊ฒ ์Šต๋‹ˆ๋‹ค.)
  • ์™œ ํ•˜ํ•„ K+1๋ฒˆ์งธ ์—ฐ์‚ฐ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ง์ „์ผ๊นŒ์š”? ํ์— ๋‚จ์•„์žˆ์„ ๋…ธ๋“œ๋“ค์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค. 2๋ฒˆ์งธ ์—ฐ์‚ฐ์ด ์‹œ์ž‘๋˜๋Š” ์‹œ์ ์€, 1๋ฒˆ์งธ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฐ๊ณผ๊ฐ’๋“ค์„ ์ „๋ถ€ ์–ป์–ด์„œ ํ์— ๋„ฃ์—ˆ์„ ๋•Œ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” K๋ฒˆ์งธ ์—ฐ์‚ฐ์—์„œ ๋‚˜์˜จ ๋ชจ๋“  ๊ฐ’์—์„œ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ, K+1๋ฒˆ์งธ ์—ฐ์‚ฐ์ด ์‹œ์ž‘ํ•˜๊ธฐ ์ „, ์ฆ‰ ํŠœํ”Œ๋กœ BFS ๋…ธ๋“œ์— ํ•จ๊ป˜ ๋ฌถ์—ฌ์ ธ์žˆ๋˜ โ€˜์—ฐ์‚ฐ ํšŸ์ˆ˜โ€™๊ฐ€ K๊ฐ€ ๋˜๋Š” ์ˆœ๊ฐ„์— returnํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๊ณ ๋ คํ•˜์…”์•ผ ํ•˜๋Š” ์ผ€์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. 0, 1, 2, 3, โ€ฆ, 9 ๋“ฑ ํ•œ์ž๋ฆฌ ์ˆ˜
  2. 0์œผ๋กœ ๋๋‚˜๋Š” ๋‘์ž๋ฆฌ ์ˆ˜ (0์ด ์•ž์œผ๋กœ ๊ฐ€๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)
  • 0์œผ๋กœ ๋๋‚˜๋Š” n์ž๋ฆฌ ์ˆ˜(n>=3)์€์š”? : ์˜ˆ์™ธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. 100์ธ ๊ฒฝ์šฐ์—๋Š” 0๊ณผ 0์ด ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พธ์–ด 100์ด๋ผ๋Š” ๊ฐ’์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

while loop์—์„œ ์ ์ ˆํ•˜๊ฒŒ ํƒˆ์ถœํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋ณ„๋„์˜ ์˜ˆ์™ธ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋‹ต

from collections import deque 

def bfs(start, K) :
  startK = 0
  q = deque([(start, startK)])
  while q :
    if (q[0])[1] == K :
      return max(x[0] for x in q)
    tempStart, tempK = q.popleft()
    for i in range(0,len(start)-1) :
      for j in range(i+1, len(start)) :
        tempN = list(tempStart)
        tempN[j], tempN[i] = tempN[i], tempN[j]
        tempN = ''.join(tempN)
        if tempN[0] != '0' and (tempN,tempK+1) not in q :
          q.append((tempN,tempK+1))
  
  return -1

def _1039() :
  N, K = map(int, input().split())
  print(bfs(str(N), K))

_1039()


problem_solvingpython Share Tweet +1