๐Ÿ“’  ๋ฌธ์ œ ์ •๋ณด

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - 3์ง„๋ฒ• ๋’ค์ง‘๊ธฐ

์ž์—ฐ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. n์„ 3์ง„๋ฒ• ์ƒ์—์„œ ์•ž๋’ค๋กœ ๋’ค์ง‘์€ ํ›„, ์ด๋ฅผ ๋‹ค์‹œ 10์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•œ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ์ œํ•œ์‚ฌํ•ญ n์€ 1 ์ด์ƒ 100,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜

programmers.co.kr

 

 

๐Ÿ”’  ๋ฌธ์ œ ์„ค๋ช…

๋”๋ณด๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

์ž์—ฐ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. n์„ 3์ง„๋ฒ• ์ƒ์—์„œ ์•ž๋’ค๋กœ ๋’ค์ง‘์€ ํ›„, ์ด๋ฅผ ๋‹ค์‹œ 10์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•œ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ ์‚ฌํ•ญ

  • n์€ 1 ์ด์ƒ 100,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

n result
45 7
125 229

 

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • ๋‹ต์„ ๋„์ถœํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    n (10์ง„๋ฒ•) n (3์ง„๋ฒ•) ์•ž๋’ค ๋ฐ˜์ „(3์ง„๋ฒ•) 10์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„
    45 1200 0021 7
  • ๋”ฐ๋ผ์„œ 7์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ๋‹ต์„ ๋„์ถœํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    n (10์ง„๋ฒ•) n (3์ง„๋ฒ•) ์•ž๋’ค ๋ฐ˜์ „(3์ง„๋ฒ•) 10์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„
    125 11122 22111 229
  • ๋”ฐ๋ผ์„œ 229๋ฅผ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ”‘  ๋ฌธ์ œ ํ’€์ด

๋ฐฉ๋ฒ• 1. ๋‹จ์ˆœ ๋ฆฌ์ŠคํŠธ ํ™œ์šฉ

๋ฆฌ์ŠคํŠธ์˜ ํŠน์ง•์„ ํ™œ์šฉํ•œ ๋‹จ์ˆœํ•œ ํ’€์ด์ด๋‹ค. ๋‹ค๋งŒ 3์ง„๋ฒ• intํ˜•์œผ๋กœ ๋ฐ”๊พธ๊ณ  → 3์ง„๋ฒ• int๋ฅผ ๋’ค์ง‘๊ณ  → 10์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋Œ€์‹ , 3์ง„๋ฒ•์˜ ๊ฐ ์ž๋ฆฌ๋ฅผ ๋ฆฌ์ŠคํŠธ์— ๋‹ด๊ณ  ๊ฐ ์š”์†Œ๋ฅผ ๋’ค์—์„œ๋ถ€ํ„ฐ 10์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ค‘๊ฐ„๊ณผ์ •์„ ์ƒ๋žตํ•˜์˜€๋‹ค.

def solution(n):
    result = 0
    r_list = []
    q = n

    # n -> 3์ง„๋ฒ• list๋กœ ๋ณ€ํ™˜
    while q >= 0 :
        r_list.append(q % 3)
        q //= 3
        if q == 0:
            break

    # ๋‚˜๋จธ์ง€๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์‹œ ์‹ญ์ง„๋ฒ•์œผ๋กœ ๋ฐ”๊พธ๊ธฐ
    for i in range(len(r_list)):
        result += r_list[-(i+1)] * 3 ** i

    return (result)

 

๋ฐฉ๋ฒ• 2. int(num, base) ํ™œ์šฉ

Python์˜ int() ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง„๋ฒ• ๋ณ€ํ™˜์„ ํ•˜๋ฉด ํ›จ์”ฌ ๊ฐ„๋‹จํ•œ ํ’€์ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

def solution(n):
    tmp = ''
    while n:
        tmp += str(n % 3)
        n = n // 3

    answer = int(tmp, 3)
    return answer

 

 

๐Ÿ’ก  What I learned

1. int(n, base) : n์ง„๋ฒ•์œผ๋กœ ํ‘œ๊ธฐ๋œ string์„ 10์ง„๋ฒ• ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ - int ํ•จ์ˆ˜

๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” ์ด ํ•จ์ˆ˜๊ฐ€ ๊ธฐ๋Šฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜, ์ด ํ•จ์ˆ˜๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ์—๋„ ๋ณดํ†ต ๋‚˜์˜ ํ’€์ด์™€ ๊ฐ™์ด for๋ฌธ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค.

num = '1200'
base = 3

answer = 0
for idx, number in enumerate(num[::-1]):
    answer += int(number) * (base ** idx)
 
๊ทธ๋Ÿฌ๋‚˜ python์˜ ์ง„๋ฒ• ๋ณ€ํ™˜ int ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋งค์šฐ ์งง๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๊ณ , ์‹œ๊ฐ„ ์—ญ์‹œ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.
 

 

๐Ÿ‘‰๐Ÿป
์ง„๋ฒ• ๋ณ€ํ™˜ ๋ฌธ์ œ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋กœ ์ž์ฃผ ๋‚˜์˜ค๋Š” ์œ ํ˜•์ด๋ฏ€๋กœ ์•Œ์•„๋‘๋ฉด ์œ ์šฉํ•˜๊ฒ ๋‹ค.

 

1-1. enumerate() : ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ์— ์ˆœ์„œ๊ฐ’์„ ๋ถ€์—ฌํ•ด์ฃผ๋Š” ํ•จ์ˆ˜

enumerate : (์˜) ์—ด๊ฑฐํ•˜๋‹ค
  • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ž๋ฃŒํ˜•(list, set, tuple, dictionary, string)์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ์ธ๋ฑ์Šค ๊ฐ’์„ ํฌํ•จํ•˜๋Š” enumerate ๊ฐ์ฒด๋ฅผ return
a = ['hong','gil','dong']
b = list(enumerate(a))
c = dict(enumerate(a))

print(b)		# => [(0, 'hong'), (1, 'gil'), (2, 'dong')]\
print(c)		# => {0: 'hong', 1: 'gil', 2: 'dong'}
  • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
    • for ๋ฌธ์˜ in ๋’ท ๋ถ€๋ถ„์„  enumerate() ํ•จ์ˆ˜๋กœ ๊ฐ์‹ธ์ฃผ๋ฉด → ์ธ๋ฑ์Šค์™€ ์›์†Œ์— ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ฉฐ ๋ฃจํ”„ ๋Œ๋ฆผ
    • for ๊ณผ in ์‚ฌ์ด์—๋Š” ์ธ๋ฑ์Šค์™€ ์›์†Œ๊ฐ€ ํ•จ๊ป˜ ๋“ค์–ด๊ฐ„๋‹ค. 

 ๋”ฐ๋ผ์„œ ์œ„์˜ 1.์—์„œ์˜ ์ฝ”๋“œ์˜ ์›๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

num = '1200'
for idx, number in enumerate(num[::-1]):	 	# num์ด๋ผ๋Š” ๋ฌธ์ž์—ด์˜ ๋’ค์—์„œ๋ถ€ํ„ฐ ํ•œ ๊ธ€์ž์”ฉ, ์ธ๋ฑ์Šค๋ฅผ ๋งค๊ฒจ ์›์†Œ์™€ ํ•จ๊ป˜ ๋‹ค๋ฃจ๋ฉฐ ๋Œ๋ฆฐ๋‹ค.
    print(f'{idx}๋ฒˆ์งธ ๊ฐ’์€ {number}')

#   =>  0๋ฒˆ์งธ ๊ฐ’์€ 0
#	1๋ฒˆ์งธ ๊ฐ’์€ 0
#	2๋ฒˆ์งธ ๊ฐ’์€ 2
#	3๋ฒˆ์งธ ๊ฐ’์€ 1

๋”ฐ๋ผ์„œ ์—ญ์ˆœ์œผ๋กœ  num * n**1 ์„ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์ง„๋ฒ• ๋ณ€ํ™˜์˜ ๊ฒฝ์šฐ enumerate๋ฅผ ํ™œ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

1-2. list[::a] ( ์‹œํ€€์Šค ๊ฐ์ฒด[ :: ์ฆ๊ฐ€ํญ] )

li[::a]					# ๋ฆฌ์ŠคํŠธ ์ „์ฒด์—์„œ ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ a๋งŒํผ์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ด

li = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
print(li[::2])			# => [0, 20, 40, 60, 80]

 ์ด์™ธ์—๋„ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ฆฌ์ŠคํŠธ ์Šฌ๋ผ์ด์‹ฑ ๊ฐœ๋…์ด ๋งŽ์€ ๋“ฏ ํ•˜๋‹ค. ์ด์— ๋Œ€ํ•ด ์ถ”ํ›„ ํฌ์ŠคํŒ…์œผ๋กœ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

2. while n :

while 0: ์ด ๋˜๋ฉด ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ (False๊ธฐ ๋•Œ๋ฌธ!)

BELATED ARTICLES

more