[๋ฐฑ์ค 1789๋ฒ] [๐ฅ5] ์๋ค์ ํฉ (python)
๋ฌธ์
์๋ก ๋ค๋ฅธ N๊ฐ์ ์์ฐ์์ ํฉ์ด S๋ผ๊ณ ํ๋ค. S๋ฅผ ์ ๋, ์์ฐ์ N์ ์ต๋๊ฐ์ ์ผ๋ง์ผ๊น?
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ S(1 โค S โค 4,294,967,295)๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
200
์์ ์ถ๋ ฅ 1
19
๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋งํ๋ ๋ถ๋ถ
๋ฌธ์ ์์๋ S = 1๋ถํฐ ์ฐจ๋ก๋๋ก ๋ํด๊ฐ ๋, ๊ทธ ํฉ์ด N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ง๋ฉด์ ๊ฐ์ฅ ํฐ S๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ก ์ด๋ฅผ ์์์ผ๋ก ํํํ๋ฉด 1๋ถํฐ S๊น์ง์ ํฉ์ด N ์ดํ์ธ ๊ฐ์ฅ ํฐ S๋ฅผ ๊ตฌํ๋ ๊ฒ์ด ๋ฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ S๋ฅผ 1๋ถํฐ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด์, 1๋ถํฐ S๊น์ง์ ํฉ์ ๊ตฌํ๊ณ ์ด๊ฒ์ด N ์ดํ์ธ์ง ๊ฒ์ฌํด์ผ ํฉ๋๋ค. 1๋ถํฐ S๊น์ง์ ํฉ์ ๋ค์๊ณผ ๊ฐ์ ๊ณต์์ผ๋ก ๊ณ์ฐํ ์ ์์ต๋๋ค.
1 + 2 + โฆ + S = S * (S+1) / 2
์ฝ๋
ver(1) - math ์ฌ์ฉ
import math
n = int(input())
s = math.floor((-1 + math.sqrt(1 + 8*n)) / 2)
print(s)
ver(2)
N = int(input()) # N์ ์
๋ ฅ๋ฐ์
temp = 1 # ๋ณ์ temp์ 1์ ํ ๋น
answer = 0 # ๋ณ์ answer์ 0์ ํ ๋น
while True: # ๋ฌดํ๋ฃจํ
N -= temp # N์์ temp๋ฅผ ๋บ
if N >= 0: # ๋ง์ฝ N์ด 0 ์ด์์ด๋ฉด
answer += 1 # answer์ 1์ ๋ํ๊ณ
temp += 1 # temp์ 1์ ๋ํจ
else: # N์ด 0๋ณด๋ค ์์์ง๋ฉด
print(answer) # ํ์ฌ๊น์ง์ answer๋ฅผ ์ถ๋ ฅํ๊ณ ๋ฃจํ๋ฅผ ๋น ์ ธ๋๊ฐ
break
ver(3)
# sys ๋ชจ๋์ importํ์ฌ stdin์ ํตํด ์
๋ ฅ์ ๋ฐ์ต๋๋ค.
import sys
# ์ฌ์ฉ์๋ก๋ถํฐ ์ ์๋ฅผ ์
๋ ฅ ๋ฐ์ต๋๋ค.
n = int(sys.stdin.readline())
# ํฉ๊ณ์ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅํ ๋ณ์๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
current_sum = 0
count = 0 # ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ฐํํ ๋ณ์๋ช
์ 'count'๋ก ๋ณ๊ฒฝํฉ๋๋ค.
# 1๋ถํฐ n๊น์ง์ ์๋ฅผ ๋ํ๋ฉด์ ์กฐ๊ฑด์ ํ์ธํฉ๋๋ค.
for num in range(1, n + 1):
current_sum += num # ํ์ฌ๊น์ง์ ํฉ์ ๊ณ์ฐํฉ๋๋ค.
count += 1 # ์ํ๋ ํ์๋ฅผ ์ธ๊ธฐ ์ํด count ๋ณ์๋ฅผ 1์ฉ ์ฆ๊ฐ์ํต๋๋ค.
# ํ์ฌ๊น์ง์ ํฉ์ด ์ฃผ์ด์ง ์ n์ ์ด๊ณผํ๋ฉด ์กฐ๊ฑด์ ๋ง์กฑํ๋ฏ๋ก count ๊ฐ์ ์กฐ์ ํ๊ณ ๋ฐ๋ณต๋ฌธ์ ์ข
๋ฃํฉ๋๋ค.
if current_sum > n:
count -= 1 # ์ด๊ณผํ ๊ฒฝ์ฐ ํ ๋ฒ ๋ ๋ํ ๊ฒ์ด๋ฏ๋ก count์์ 1์ ๋นผ์ค๋๋ค.
break
# ์ต์ข
๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
print(count)
๋๊ธ๋จ๊ธฐ๊ธฐ