๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Coding Test/Algorithms

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] N์œผ๋กœ ํ‘œํ˜„/Python - Lv.3

by The Future Engineer, Lucy 2024. 11. 26.
728x90
๋ฐ˜์‘ํ˜•

โ“๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/42895

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 11 MB, ์‹œ๊ฐ„: 19.30 ms

 
 

๋ฌธ์ œ ์„ค๋ช…

์•„๋ž˜์™€ ๊ฐ™์ด 5์™€ ์‚ฌ์น™์—ฐ์‚ฐ๋งŒ์œผ๋กœ 12๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5

5๋ฅผ ์‚ฌ์šฉํ•œ ํšŸ์ˆ˜๋Š” ๊ฐ๊ฐ 6,5,4 ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฒฝ์šฐ๋Š” 4์ž…๋‹ˆ๋‹ค.
์ด์ฒ˜๋Ÿผ ์ˆซ์ž N๊ณผ number๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, N๊ณผ ์‚ฌ์น™์—ฐ์‚ฐ๋งŒ ์‚ฌ์šฉํ•ด์„œ ํ‘œํ˜„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ค‘ N ์‚ฌ์šฉํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ
  • N์€ 1 ์ด์ƒ 9 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • number๋Š” 1 ์ด์ƒ 32,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ˆ˜์‹์—๋Š” ๊ด„ํ˜ธ์™€ ์‚ฌ์น™์—ฐ์‚ฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์—์„œ ๋‚˜๋จธ์ง€๋Š” ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์†Ÿ๊ฐ’์ด 8๋ณด๋‹ค ํฌ๋ฉด -1์„ return ํ•ฉ๋‹ˆ๋‹ค.
์ž…์ถœ๋ ฅ ์˜ˆ
N number return
5 12 4
2 11 3

โœ๐Ÿปํ’€์ด

N๊ณผ number๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ์ตœ์†Ÿ๊ฐ’์„ 1์ด ๋  ์ˆ˜ ๋ฐ–์— ์—†์œผ๋ฏ€๋กœ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

N์„ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” 55, 5/5, 5x5, 5+5, 5-5๊ฐ€ ์žˆ๋‹ค. ์ด๊ฑธ ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด N๊ณผ ์—ฐ์‚ฐ์ž ์กฐํ•ฉ์„ ์ด์šฉํ•˜์—ฌ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋Ÿผ N์„ ์„ธ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” N์„ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์—ฐ์‚ฐ์ž, ๊ทธ๋ฆฌ๊ณ  N์„ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์กฐํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, N์„ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋กœ 5+5, ์—ฐ์‚ฐ์ž๋Š” -, 5๋ผ๊ณ  ํ•˜๋ฉด ์ด ์กฐํ•ฉ์€ 5 + 5 - 5๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋ฐ˜๋Œ€๋กœ 5 - 5 + 5 ์กฐํ•ฉ๋„ ๋œ๋‹ค. 55 + 5์™€ 5 + 55์˜ ๊ฒฝ์šฐ์—๋Š” ๊ฐ’์ด ๊ฐ™๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ set์„ ์ด์šฉํ•˜์—ฌ ์ค‘๋ณต๋œ ๊ฐ’์€ ์กด์žฌํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ œ์•ฝ์‚ฌํ•ญ์—์„œ ์ตœ์†Ÿ๊ฐ’์ด 8๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๋Š” -1์„ ๋ฐ˜ํ™˜ํ•˜๋ผ๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ for๋ฌธ์„ ๋Œ๋ฉฐ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ’ป์ฝ”๋“œ

def solution(N, number):
    if N == number:
        return 1
    
    dp = [set() for _ in range(9)]
    dp[1].add(N)
    x = N
    for i in range(2, 9):
        dp.append(set())
        x = 10 * x + N
        dp[i].add(x)
        for j in range(i):
            for op1 in dp[j]:
                for op2 in dp[i-j]:
                    dp[i].add(op1 + op2)
                    dp[i].add(op1 - op2)
                    dp[i].add(op1 * op2)
                    if op2 != 0:
                        dp[i].add(op1 // op2)
        
        if number in dp[i]:
            return i
        
    return -1

๐Ÿ“ํ›„๊ธฐ

DP๋Š” ๋งž๋Š”๋ฐ ๊ฐ„๋‹จํ•œ DP ๋ฌธ์ œ๋งŒ ๋ณด๋‹ค๋ณด๋‹ˆ ์ด๋Ÿฐ DP๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผํ• ์ง€ ๊ฐ์ด ์ž˜ ์žกํžˆ์ง€ ์•Š๋Š”๋‹ค. ์กฐํ•ฉํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๊ทธ ์ด์ƒ์œผ๋กœ๋Š” ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•˜๋Š” ๋‚ด ์ž์‹ ์ด ๋„ˆ๋ฌด ๋‹ต๋‹ต..

728x90
๋ฐ˜์‘ํ˜•