[ํ๋ก๊ทธ๋๋จธ์ค | Python] 3์ง๋ฒ ๋ค์ง๊ธฐ
๐ ๋ฌธ์ ์ ๋ณด
- ์ถ์ฒ : ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง ์์ฆ 1
- ๋์ด๋ : Level 1
- ๋ฌธ์ ๋งํฌ : https://programmers.co.kr/learn/courses/30/lessons/68935
์ฝ๋ฉํ ์คํธ ์ฐ์ต - 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)
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๊ธฐ ๋๋ฌธ!)
'Problem Solving > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค | Python] ํผ๋ก๋ (0) | 2022.06.21 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค | Python] ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ (0) | 2022.06.21 |
[ํ๋ก๊ทธ๋๋จธ์ค | Python] ํคํจ๋ ๋๋ฅด๊ธฐ (0) | 2022.06.20 |
[ํ๋ก๊ทธ๋๋จธ์ค | Python] ํฐ์ผ๋ชฌ (0) | 2022.06.20 |
[ํ๋ก๊ทธ๋๋จธ์ค | Python] ํ๊ฒ ๋๋ฒ (0) | 2022.06.17 |