1. ๋ถ์์ ๋ง์
Q. ์ฒซ๋ฒ์งธ ๋ถ์์ ๋ถ์์ ๋ถ๋ชจ๋ฅผ ๋ปํ๋ numer1, denom1, ๋๋ฒ์งธ ๋ถ์์ ๋ถ์์ ๋ถ๋ชจ๋ฅผ ๋ปํ๋ numer2, denom2 ๊ฐ
๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ๋ ๋ถ์๋ฅผ ๋ํ ๊ฐ์ ๊ธฐ์ฝ ๋ถ์๋ก ๋ํ๋ด์์ ๋, ๋ถ์์ ๋ถ๋ชจ๋ฅผ ์์๋๋ก ๋ด์ ๋ฐฐ์ด์ return ํ๋๋ก
solution ํจ์๋ฅผ ์์ฑํด๋ณด์ธ์.
A. ํ๋ก๊ทธ๋๋จธ์ค๋ ๋ชจ๋ ์ ์ฉ์ด ์๋๋๊น ์ผ์ผ์ด ๊ตฌํ์ ํด์ค์ผ ํ๋๋ฐ,
์ด๋ป๊ฒ ํด์ค์ผ ํ๋์ง ๋ชจ๋ฅด๋๊น ์ผ๋จ ๋ณด๋ผ์ ์ํํ
๋ฌผ์ด๋ด์ ์ป์ ์ฝ๋๋ฅผ ๋ฐ๋ ค์๋ดค์ต๋๋ค.
def gcd(a, b):
while b:
a, b = b, a % b
return a
def lcm(a, b):
return a * b // gcd(a, b)
def solution(numer1, denom1, numer2, denom2):
# ๊ณตํต ๋ถ๋ชจ ๊ณ์ฐ
common_denom = lcm(denom1, denom2)
print(f"๊ณตํต ๋ถ๋ชจ: {common_denom}") # 4
# ๋ถ์ ๊ณ์ฐ
new_numer1 = numer1 * (common_denom // denom1)
new_numer2 = numer2 * (common_denom // denom2)
print(f"์กฐ์ ๋ ๋ถ์1: {new_numer1}") # 2
print(f"์กฐ์ ๋ ๋ถ์2: {new_numer2}") # 3
total_numer = new_numer1 + new_numer2
print(f"๋ถ์ ํฉ: {total_numer}") # 5
# ๊ธฐ์ฝ ๋ถ์๋ก ๋ง๋ค๊ธฐ
divisor = gcd(total_numer, common_denom)
print(f"์ต๋๊ณต์ฝ์: {divisor}") # 1
result = [total_numer // divisor, common_denom // divisor]
print(f"๊ฒฐ๊ณผ: {result}") # [5, 4]
return result
ํด๋น ์ฝ๋์ ์๋ฆฌ๋
: ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ๋ ๊ธฐ๋ฅ์ ํจ์๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
์ต๋๊ณต์ฝ์, ์ต์๊ณต๋ฐฐ์ ํจ์๋ค์ ๊ฐ์ง๊ณ ๋ ๋ถ์์ ํฉ์ ๋ง๋ค์ด ์ค๋๋ค.
๋ ๋ถ์์ ํฉ์ ๊ธฐ์ฝ ๋ถ์๋ก ๋ํ๋์ ๋, ๋ถ์์ ๋ถ๋ชจ๋ฅผ ์์๋๋ก ๋ด์ ๋ฐฐ์ด์
return ํด์ค๋๋ค.
def gcd(a, b): # ์ต๋๊ณต์ฝ์ ํจ์ ์์ฑ
while b: # b๊ฐ 0์ด ๋ ๋๊น์ง ๋ฐ๋ณต
a, b = b, a % b # a์ b์ ์ต๋๊ณต์ฝ์๋ b์ a๋ฅผ b๋ก ๋๋ ๋๋จธ์ง์ ์ต๋๊ณต์ฝ์์ ๊ฐ๋ค.
return a # ๊ฒฐ๋ก ์ ์ผ๋ก a๊ฐ ์ต๋๊ณต์ฝ์๊ฐ ๋๋ค.
์ต๋๊ณต์ฝ์ ํจ์ gcd ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
while b: ๋จ๋ฝ์์
while b != 0 ๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ช
์์ ์ผ๋ก
๋ฌ์์ฃผ์ง ์์๋ ๋ฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก 0์ False๊ฐ,
0์ด ์๋ ์ซ์๋ True๊ฐ์ผ๋ก ํ๊ฐ๋๋๋ฐ,
while๋ฌธ์ True์ผ ๊ฒฝ์ฐ(ex. while b:) ๋ฌดํ ๋ฐ๋ณต๋๋ค๊ฐ
b๊ฐ 0์ด ๋ ๊ฒฝ์ฐ False๋ก ํ๊ฐ๋์ด ๋ฃจํ๊ฐ ์ข
๋ฃ๋๋ค.
while b ์ธ ๋์
a, b = b, a % b ์ด๋ค.
์๋ฅผ ๋ค์ด,
20(a)๊ณผ 12(b)์ ์ต๋๊ณต์ฝ์๋ 20์ 12๋ก ๋๋ ๋๋จธ์ง์ ์ต๋๊ณต์ฝ์์ ๊ฐ๋ค.
: 20 / 12 = 1(๋ชซ)... 8(๋๋จธ์ง)
: 12 / 8 = 1... 4
: 8 / 4 = 2... 0
๋๋จธ์ง๊ฐ 0์ด ๋์์ผ๋ฏ๋ก ๋ง์ง๋ง์ผ๋ก 8์ ๋๋ ์ซ์์ธ 4๊ฐ
20๊ณผ 12์ ์ต๋๊ณต์ฝ์๊ฐ ๋๋ค.
์ข ๋ ์ดํด๊ฐ ์ฝ๊ฒ ์ค๋ช
ํด๋ณด์๋ฉด,
gcd(a, b) = gcd(b, r)
์ฌ๊ธฐ์ r์ a์ b๋ฅผ ๋๋ ๋๋จธ์ง ๊ฐ์ด๋ค.
์์ ์์ ๋ฅผ ๋์
ํด๋ณด์๋ฉด,
20(a) / 12(b) => 12(b) / 8(r) ๊ฐ ๋๋ฏ๋ก,
์์ ์์์ฒ๋ผ
: 20(a) / 12(b) = 1(๋ชซ)... 8(r)
: 12(b=a) / 8(r=b) = 1... 4
: 8 / 4 = 2... 0
๋๋จธ์ง๊ฐ 0์ด ๋์ฌ ๋๊น์ง
a์ b์๋ฆฌ์ b์ r์ ์๊ฐ ๋์ฒด๋ฅผ ํ๋ฉด์ ๊ณต์ฝ์ ์ฐพ๋
ํ์๋ฅผ ๋ฐ๋ณตํ๋ค.
์ค๋ น,
a๊ฐ b๋ณด๋ค ์์ ์์ผ ์ง๋ผ๋,
๋ง์ฐฌ๊ฐ์ง๋ก ์ฒซ ๋จ๊ณ์์ ๋ ์์ ์์น๊ฐ ์ ์์ ์ผ๋ก ๊ต์ฒด๋์ด
๊ณ์ฐ์ด ์งํ๋๋ค.
ex.
: 18(a) / 48(b) = 0(๋ชซ)... 18(r)
: 48(b=a) / 18(r=b) = 2... 12
:18 / 12 = 1... 6
:12 / 6 = 2... 0
๋๋จธ์ง๊ฐ 0์ด ๋์์ผ๋ฏ๋ก,
18๊ณผ 48์ ์ต๋๊ณต์ฝ์๋ 6.
์ด๋ฐ ์์ผ๋ก a๊ฐ b๋ณด๋ค ์๊ฐ ์์๋ ๊ณ์ฐ์ด ์ ์์ ์ผ๋ก ๋ง๋ฌด๋ฆฌ๊ฐ ๋๋ค.
def lcm(a, b): # ์ต์๊ณต๋ฐฐ์ ํจ์ ์์ฑ
return a * b // gcd(a, b) # a์ b๋ฅผ ๊ณฑํ ๊ฐ์ a์ b์ ์ต๋๊ณต์ฝ์๋ก ๋๋ ์ค๋๋ค.
์ต์๊ณต๋ฐฐ์ ํจ์ lcm์ ์์ฑํด์ค๋๋ค.
์๋ฅผ ๋ค์ด,
lcm(a, b) ๋
: 12 * 18 // gcd(12, 18)
: 12 * 18 = 216
: 216 // (12, 18)์ ์ต๋๊ณต์ฝ์ 6
: 36
์ด๋ฏ๋ก, 12์ 18์ ์ต์๊ณต๋ฐฐ์๋ 36์ด ๋ฉ๋๋ค.
๋ณด๋ค ์ฝ๊ฒ ์ค๋ช
ํ์๋ฉด,
์๋ฅผ ๋ค์ด, 4์ 6์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ๋ ค๊ณ ํ๋ค.
์ผ๋จ 4์ 6์ ๋จผ์ ๊ณฑํด์ค๋๋ค.
24๋ 4์ 6์ ๊ณต๋ฐฐ์์
๋๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ์ ๋ชฉ์ ์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ๋ ๊ฒ.
๊ทธ๋์ 24๋ฅผ 4์ 6์ ์ต๋๊ณต์ฝ์๋ก ๋๋๋ค.
: 4์ 6์ ์ต๋๊ณต์ฝ์ = 2
: 24 / 2 = 12
์ด๋ ๊ฒ ํด์ ๋์จ 12๊ฐ 4์ 6์ ์ต์๊ณต๋ฐฐ์์ด๋ค.
๋๋์
์ ํ ๋ /๊ฐ ์๋ //๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋,
์ค์๊ฐ ์๋ ์ ์ ๋๋์
(๋ชซ)์ ๋ณด์ฅํ๊ธฐ ์ํด์ // ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
def solution(numer1, denom1, numer2, denom2):
# ๊ณตํต ๋ถ๋ชจ ๊ณ์ฐ
common_denom = lcm(denom1, denom2) # denom1, 2์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํด์ค๋๋ค.
print(f"๊ณตํต ๋ถ๋ชจ: {common_denom}") # 4 << 4(์ต์๊ณต๋ฐฐ์)๊ฐ denom1, 2์ ๊ณตํต๋ถ๋ชจ๊ฐ ๋์์.
# ๋ถ์ ๊ณ์ฐ
new_numer1 = numer1 * (common_denom // denom1) # ๋ถ์1 ๊ณฑํ๊ธฐ (๊ณตํต๋ถ๋ชจ ๋๋๊ธฐ ๋ถ๋ชจ1)
new_numer2 = numer2 * (common_denom // denom2) # ๋ถ์2 ๊ณฑํ๊ธฐ (๊ณตํต๋ถ๋ชจ ๋๋๊ธฐ ๋ถ๋ชจ2)
print(f"์กฐ์ ๋ ๋ถ์1: {new_numer1}") # 2
print(f"์กฐ์ ๋ ๋ถ์2: {new_numer2}") # 3
total_numer = new_numer1 + new_numer2 # ๋ถ์ํฉ์ 7๋ฒ๋ผ์ธ ๋ํ๊ธฐ 8๋ฒ๋ผ์ธ
print(f"๋ถ์ ํฉ: {total_numer}") # 5
# ๊ธฐ์ฝ ๋ถ์๋ก ๋ง๋ค๊ธฐ
divisor = gcd(total_numer, common_denom) # divisor ๋ (๋ถ์ํฉ๊ณผ ๊ณตํต๋ถ๋ชจ)์ ์ต๋๊ณต์ฝ์
print(f"์ต๋๊ณต์ฝ์: {divisor}") # 1
result = [total_numer // divisor, common_denom // divisor]
print(f"๊ฒฐ๊ณผ: {result}") # [5, 4]
return result
common_denom ๋ณ์์
denom1๊ณผ denom2์ ์ต์๊ณต๋ฐฐ์๋ฅผ ํ ๋นํด์ค๋๋ค.
2์ 4์ ์ต์๊ณต๋ฐฐ์๋ 4.
new_numer1 ๋ณ์์
numer1(1) * (common_denom(4) // denom1(2)) ๊ฐ์ ํ ๋น.
: 1 ๊ณฑํ๊ธฐ (4 ๋๋๊ธฐ 2) = 2
new_numer2 ๋ณ์์
numer2(3) * (common_denom(4) // denom2(4)) ๊ฐ์ ํ ๋น.
: 3 ๊ณฑํ๊ธฐ (4 ๋๋๊ธฐ 4) = 3
total_numer ๋ณ์์ new_numer1 + new_numer2 ๊ฐ์
ํ ๋นํด์ค๋๋ค.
๊ทธ๋ผ total_numer์ ๊ฐ์ 5.
๊ธฐ์ฝ ๋ณ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ divisor ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
divisor ๋ณ์์ total_numer(5)์ common_denom(4)์
์ต๋๊ณต์ฝ์๋ฅผ ํ ๋น.
์ด์ divisor ๋ณ์์ ๊ฐ์ 1.
result = [total_numer // divisor, common_denom // divisor]
: result ๋ [5 ๋๋๊ธฐ 1, 4 ๋๋๊ธฐ 1] ์ด๋ฏ๋ก
: return result ๊ฐ์ [5, 4]
์ ์ด๋ ต๋ค^____^
์ต๋ํ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ ์ด๋ด.
ํน์๋ ์ดํด ์๊ฐ์
จ๋ ๋ถ๋ค์ด ๊ณ์๋ค๋ฉด
์ด ๊ธ์ด ์ดํด์ ๋์์ด ๋์ ์ข๊ฒ ์๋ค.
2. ์ค์๊ฐ ๊ตฌํ๊ธฐ
Q. ์ค์๊ฐ์ ์ด๋ค ์ฃผ์ด์ง ๊ฐ๋ค์ ํฌ๊ธฐ์ ์์๋๋ก ์ ๋ ฌํ์ ๋ ๊ฐ์ฅ ์ค์์ ์์นํ ๊ฐ์ ๋งํฉ๋๋ค.
์๋ฅผ ๋ค์ด, 1, 2, 7, 10, 11์ ์ค์๊ฐ์ 7์
๋๋ค. ์ ์ ๋ฐฐ์ด array ๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋,
์ค์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด๋ณด์ธ์.
A.
def solution(array):
answer = 0
answer = array # answer ๋ณ์์ array ํ ๋น.
sorted_data = sorted(answer) # answer ๊ฐ์ ์ ๋ ฌํด์ค๋๋ค.
n = len(sorted_data) # ์ ๋ ฌ๋ answer ์ ๊ธธ์ด๊ฐ(=๋ฐ์ดํฐ ๊ฐ์)์ ๋ณ์ n์ ํ ๋น.
if n % 2 == 0: # n๊ณผ 2๋ฅผ ๋๋ ๊ฐ์ ๋๋จธ์ง๊ฐ 0์ผ ๋:
return (sorted_data[n//2 -1] + sorted_data[n//2] / 2) # ๋ฐ์ดํฐ ์ง์ํ ์ค์๊ฐ ๋ฐํ
else: # ์๋ ๋(๋๋จธ์ง๊ฐ ์์ ๊ฒฝ์ฐ):
return sorted_data[n//2] # ๋ฐ์ดํฐ ํ์ํ ์ค์๊ฐ ๋ฐํ
if n % 2 == 0:
์ ๋ฐ์ดํฐ์ ๊ฐฏ์๊ฐ ์ง์์ผ ๊ฒฝ์ฐ์ด๋ค.
์ด ๋๋ ์ค์์ ์์นํ ๊ฐ์ด ๋ ๊ฐ๊ฐ ๋๋ฏ๋ก,
๋ ๊ฐ ๊ฐ์ ํ๊ท ์ ์ค์๊ฐ์ผ๋ก ์น๋ถํ๋ค.
(sorted_data[n // 2 - 1] + sorted_data[n // 2] / 2)
: (sorted_data[์ธ๋ฑ์ค = ํด๋น ๋ฐ์ดํฐ๊ฐ ๋ฆฌ์คํธ ๋ด์ ์์น๋ ๊ฐ]
+
sorted_data[์ธ๋ฑ์ค = ํด๋น ๋ฐ์ดํฐ๊ฐ ๋ฆฌ์คํธ ๋ด์ ์์น๋ ๊ฐ] / 2)
(sorted_data[n // 2 - 1] + sorted_data[n // 2] / 2) ์์ - 1์ด ๋ค์ด๊ฐ๋ ์ด์ ๋
์ง์ ๊ฐ์ ๋ฐ์ดํฐ์์ ์ค์๊ฐ์ ๊ตฌํ ๋ ์ค๊ฐ์ ์์นํ ๋ ๊ฐ์ ์ ํํ ์ ํํ๊ธฐ ์ํจ์ด๋ค.
- ์ง์ ๊ฐ์ ๋ฐ์ดํฐ์์ ์ค์๊ฐ์ ๊ฐ์ด๋ฐ ๋ ์์ ํ๊ท .
- n // 2๋ ๋ฐ์ดํฐ์ ์ค๊ฐ ์ง์ ์ ๊ฐ๋ฆฌํจ๋ค. ์๋ฅผ ๋ค์ด, 6๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด n // 2๋ 3.
- ํ์ง๋ง ํ์ด์ฌ์์ ๋ฆฌ์คํธ์ ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๋ฏ๋ก, n // 2๋ ์ค์ ๋ก ์ค๊ฐ ์ง์ ๋ฐ๋ก ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ๊ทธ๋์ ์ค๊ฐ ์ง์ ์ ์ผ์ชฝ ๊ฐ์ ์ ํํ๋ ค๋ฉด n // 2 - 1์ ์ฌ์ฉํด์ผํ๋ค.
์๋ฅผ ๋ค์ด, [1, 2, 3, 4]๋ผ๋ ๋ฆฌ์คํธ๊ฐ ์๋ค๋ฉด:
- n // 2๋ 2์ด๊ณ , sorted_data ๋ 3์ ๋๋ค.
- n // 2 - 1์ 1์ด๊ณ , sorted_data ๋ 2์ ๋๋ค.
๋ฐ๋ผ์, (sorted_data[n // 2 - 1] + sorted_data[n // 2] / 2)๋
: (2 + 3) / 2 = 2.5๊ฐ ๋์ด ์ ํํ ์ค์๊ฐ์ ๊ตฌํ ์ ์์ต๋๋ค.
else:
๋๋จธ์ง๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ >> ๊ฒฐ๊ตญ์ ๋ฐ์ดํฐ ๊ฐ์๊ฐ ํ์์ธ ๊ฒฝ์ฐ๋ค.
ํ์ ๊ฐ์ ๋ฐ์ดํฐ์์ ์ค์๊ฐ์ ํ ๊ฐ๊ฐ ๋๋ฏ๋ก,
sorted_data[n // 2] ๋ฅผ return ํฉ๋๋ค.
'[๋ด๋ฐฐ์บ ] ๋ณธ ์บ ํ (24.11.25 ~ 25.03.31) ๐๐ปโโ๏ธ > ๋ฌธ์ ํ์ด ๐ฏ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[241217] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (0) | 2024.12.17 |
---|---|
[241217] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (0) | 2024.12.17 |
[241212] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (2) | 2024.12.12 |
[241211] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (1) | 2024.12.11 |
[241127] ์ด๋ณด๋ฅผ ์ํ ํ์ด์ฌ 300์ ์ฐ์ต (1) | 2024.11.27 |