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

[Python]๋ฐฑ์ค€ 4673๋ฒˆ::์…€ํ”„ ๋„˜๋ฒ„

by ๋„์บ๋ฆฌ๐Ÿฑ 2021. 4. 29.
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ:

์…€ํ”„ ๋„˜๋ฒ„๋Š” 1949๋…„ ์ธ๋„ ์ˆ˜ํ•™์ž D.R. Kaprekar๊ฐ€ ์ด๋ฆ„ ๋ถ™์˜€๋‹ค. ์–‘์˜ ์ •์ˆ˜ n์— ๋Œ€ํ•ด์„œ d(n)์„ n๊ณผ n์˜ ๊ฐ ์ž๋ฆฌ์ˆ˜๋ฅผ ๋”ํ•˜๋Š” ํ•จ์ˆ˜๋ผ๊ณ  ์ •์˜ํ•˜์ž. ์˜ˆ๋ฅผ ๋“ค์–ด, d(75) = 75+7+5 = 87์ด๋‹ค.

์–‘์˜ ์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ˆ˜๋ฅผ ์‹œ์ž‘ํ•ด์„œ n, d(n), d(d(n)), d(d(d(n))), ...๊ณผ ๊ฐ™์€ ๋ฌดํ•œ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด, 33์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด ๋‹ค์Œ ์ˆ˜๋Š” 33 + 3 + 3 = 39์ด๊ณ , ๊ทธ ๋‹ค์Œ ์ˆ˜๋Š” 39 + 3 + 9 = 51, ๋‹ค์Œ ์ˆ˜๋Š” 51 + 5 + 1 = 57์ด๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...

n์„ d(n)์˜ ์ƒ์„ฑ์ž๋ผ๊ณ  ํ•œ๋‹ค. ์œ„์˜ ์ˆ˜์—ด์—์„œ 33์€ 39์˜ ์ƒ์„ฑ์ž์ด๊ณ , 39๋Š” 51์˜ ์ƒ์„ฑ์ž, 51์€ 57์˜ ์ƒ์„ฑ์ž์ด๋‹ค. ์ƒ์„ฑ์ž๊ฐ€ ํ•œ ๊ฐœ๋ณด๋‹ค ๋งŽ์€ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 101์€ ์ƒ์„ฑ์ž๊ฐ€ 2๊ฐœ(91๊ณผ 100) ์žˆ๋‹ค. 

์ƒ์„ฑ์ž๊ฐ€ ์—†๋Š” ์ˆซ์ž๋ฅผ ์…€ํ”„ ๋„˜๋ฒ„๋ผ๊ณ  ํ•œ๋‹ค. 100๋ณด๋‹ค ์ž‘์€ ์…€ํ”„ ๋„˜๋ฒ„๋Š” ์ด 13๊ฐœ๊ฐ€ ์žˆ๋‹ค. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97

10000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์…€ํ”„ ๋„˜๋ฒ„๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

๐Ÿ‘‡๋‚ด ํ’€์ด(์ •๋‹ต ์—ฌ๋ถ€ O) 

not_self_num =[]

def d_n(i):
    if(i < 10000):
        str_i = str(i)
        
        if(len(str_i) == 1):
            next_n = i+i
            not_self_num.append(next_n)
            
        elif(len(str_i) == 2):
            next_n = i + int(str_i[0])+int(str_i[1])
            not_self_num.append(next_n)
            
        elif(len(str_i) == 3):
            next_n = i + int(str_i[0])+int(str_i[1]) +int(str_i[2])
            not_self_num.append(next_n)
            
        elif(len(str_i)== 4):
            next_n = i + int(str_i[0])+int(str_i[1]) +int(str_i[2])+int(str_i[3])
            not_self_num.append(next_n)          
    else:
        pass

for i in range(1,10000):
    d_n(i)
    

self_num = []

for i in range(1,10001):
    if(i not in not_self_num):
        self_num.append(i)

for i in range(len(self_num)):
    print(self_num[i])
        
    

์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)

์ตœ๋Œ€ 10000์„ ์ˆ˜ํ–‰ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, 

1์ดˆ์˜ ์ œํ•œ์‹œ๊ฐ„ ๊ดœ์ฐฎ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€