์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- dev
- PRD
- ๋๋น์ฐ์ ํ์
- SAP
- ๊น์ด์ฐ์ ํ์
- tasknumber
- Import
- Function Module
- select
- ์ด๋ถํ์
- ์ค๋ฒ3
- subscreen
- ์คํธ๋ญ์ฒ
- ๋ชจ๋ํ
- ์ค๋ฒ2
- ์๊ณ ๋ฆฌ์ฆ
- Export
- t์ฝ๋
- ๋ฐฑ์ค
- abap dictionary
- modify
- call function
- screen program
- ABAP
- ๋จ๋ฐฉํฅํ์
- screen
- structure
- ์๋ฐฉํฅํ์
- qas
- Internal Table
- Today
- Total
CS Student’s SAP&Tech Journey๐ซ
[ํ์ด์ฌ] 11561๋ฒ: ์ง๊ฒ๋ค๋ฆฌ / ์ด๋ถํ์ ๋ณธ๋ฌธ
[ํ์ด์ฌ] 11561๋ฒ: ์ง๊ฒ๋ค๋ฆฌ / ์ด๋ถํ์
์ธํฌ๋งํฑ 2024. 10. 30. 00:381. ๋ฐฑ์ค 11561๋ฒ ์ง๊ฒ๋ค๋ฆฌ
https://www.acmicpc.net/problem/11561
N๋ฒ ์ง๊ฒ๋ค๋ฆฌ๋ ๋ฐ๋์ ๋ฐ์์ผ ํ๋ค.
:: ๋ง์ง๋ง ์ง๊ฒ๋ค๋ฆฌ๋ ๋ฐ์์ผ ํ๋ค๋ ๋ป์ด๋ค.
:: ์๋ฅผ ๋ค์ด, ์ ๋ ฅ์ด 100์ด๋ฉด 13๋ฒ์งธ ์ง๊ฒ๋ค๋ฆฌ๋ ๊ผญ ๊ฑด๋์ผ ํ๋ค๋ ๋ป์ด๋ค. 100์ ๋ฐ๋๋ค๋ ๋ป ์๋!
2. ์ค๋์ ํ๊ณ
* ์ ๋ต์ ์๋์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์ ๊ทผ: ๋จ์ ๊ตฌํ์ผ๋ก ํ๊ธฐ :: ์๊ฐ์ด๊ณผ
๋จ์ ๊ตฌํ์ ํตํด์ ํ์ด๋ณด์๋ค. ์ ์๋ฌธ์ ํตํด ์ง๊ฒ๋ค๋ฆฌ๊ฐ 1 2 3 4 5 6 7 8 9 10 ... ์ค 1 3 6 10 ์ ํด๋นํ๋ค๋ ๊ฒ์ ํ์ ํ๊ณ ๋จ์ ๋ฐ๋ณต๋ฌธ์ ํตํด N์์ ๋นผ๋ ๊ฐ์ ๋๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ์๋ค.
N์ ๋ฒ์๋ (1 ≤ N ≤ 10**16) ์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด๊ณผ ๋ฐ์ํ๋ค.
T = int(input())
for j in range(T):
n = int(input())
i = 2
cnt = 1
if n==1 or n==2:
print(1)
else:
while True:
n = n-i
i = i+1
cnt = cnt+1
if n<0:
cnt = cnt-1
print(cnt)
break
elif n==0:
print(cnt)
break
๋ ๋ฒ์งธ ์ ๊ทผ: ์ด๋ถํ์ ::์ฑ๊ณต
1. ์ ๋ ฅ ๋ฒ์ ํ์ ํ๊ธฐ
์ง๊ฒ๋ค๋ฆฌ์ ์ด ์ N์ ๋ฒ์๊ฐ (1 ≤ N ≤ 10**16)๋ก ์ฃผ์ด์ก๊ธฐ ๋๋ฌธ์ ์ด๋ถํ์์์ ํ์ ํ ์ ์๋ค. ๋ํ, ๋ฌธ์ ์ ์ ๊ทผํ ๋ ์ด๋ค ๊ฒ์ ๋ํ๊ฑฐ๋ ๋นผ์ด์ ์ต๋ ์ต์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ ์ด๋ถํ์์ ๊ณ ๋ คํด๋ณด์์ผ ํ๋ค.
2. ํ์ด๊ณผ์
1) Left, Right ์ ํ๊ธฐ
์ง๊ฒ๋ค๋ฆฌ ์ ํ๋ฅผ 1๋ฒ ํ๋ฉด ๊ฑฐ๋ฆฌ๋ 1, ์ ํ๋ฅผ ๋ ๋ฒ ํ๋ฉด ๊ฑฐ๋ฆฌ๋ 1+2, ์ ํ๋ฅผ ์ธ ๋ฒ ํ๋ฉด ๊ฑฐ๋ฆฌ๋ 1+2+3์ผ๋ก ๋ฑ์ฐจ์์ด๋๋ก ๊ฑฐ๋ฆฌ๊ฐ ๋์ด๋๋ค. ๋ฐ๋ผ์ ์ ํ๋ K๋ฒํ๋ฉด ๊ฑฐ๋ฆฌ๋ K*(K+1) // 2 ๋งํผ ๋์ด๋๊ฒ ๋๋ค.
์ง๊ฒ๋ค๋ฆฌ๋ฅผ 100๊ฐ ์ฃผ์ด์ง๋ค๊ณ ์น๋ค.
์ ํ๋ฅผ 12๋ฒ ํ๋ฉด ์ง๊ฒ๋ค๋ฆฌ ๊ฐ์(๊ฑฐ๋ฆฌ)๋ 12*(12+1) // 2 = 78๊ฐ๊ฐ ๋๋ค
====> ์ฃผ์ด์ง 100๊ฐ๋ณด๋ค ํ์ฐธ์์ (์ต๋์ ๋ถํฉํ์ง ์์)
์ ํ๋ฅผ 13๋ฒ ํ๋ฉด ์ง๊ฒ๋ค๋ฆฌ ๊ฐ์(๊ฑฐ๋ฆฌ)๋ 13*(13+1) // 2 = 91๊ฐ๊ฐ ๋๋ค.
====> ์ฃผ์ด์ง 100๊ฐ๋ณด๋ค 9๊ฐ ์์ (์ต๋์ ๋ถํฉํจ)
์ ํ๋ฅผ 14๋ฒ ํ๋ฉด ์ง๊ฒ๋ค๋ฆฌ ๊ฐ์(๊ฑฐ๋ฆฌ)๋ 14*(14+1) // 2 = 105๊ฐ๊ฐ ๋๋ค.
====> ์ฃผ์ด์ง 100๊ฐ๋ณด๋ค ๋ง์ (์ง๊ฒ๋ค๋ฆฌ ๊ฐ์๋ณด๋ค ๋ง์ ์ฑ๋ฆฝํ์ง ์์ )
๋ฐ๋ผ์ ์ง๊ฒ๋ค๋ฆฌ ๊ฐ์๋ 13๊ฐ์ด๋ค.
์ ํ ํ์๊ฐ ๋์ด๋๋ฉด ๊ฐ ์ ์๋ ์ง๊ฒ๋ค๋ฆฌ(๊ฑฐ๋ฆฌ)๊ฐ ๋ง์์ง๋ค. ๋จ, ์ฃผ์ด์ง N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค.
Left์ Right๋ ์ ํ ํ์๋ฅผ ๋ํ๋ด๊ณ Mid๋ถํฐ ์์ํ๋ค.
Left = 0 Right = 10**16
Mid = (Left + Right) // 2
๊ฑฐ๋ฆฌ = (Mid * (Mid +1)) // 2
2) ์ด๋ถํ์
๋ง์ฝ ๊ฑฐ๋ฆฌ๊ฐ ์ฃผ์ด์ง N๋ณด๋ค ์์ผ๋ฉด ์ผ๋จ ๊ฐ ์ ์ฅ cnt = mid ๊ฑฐ๋ฆฌ๊ฐ ์ต๋๊ฐ์ธ์ง ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ Left = mid + 1
๋ง์ฝ ๊ฑฐ๋ฆฌ๊ฐ ์ฃผ์ด์ง N๋ณด๋ค ํฌ๋ฉด ๊ฑฐ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ์ผ ํ๊ธฐ ๋๋ฌธ์ Right = mid - 1
T = int(input())
for j in range(T):
n = int(input())
cnt = 0
left = 1
right = 10 ** 16
while left <= right:
mid = (left +right)//2
ds = (mid*(mid+1))//2
if ds < n:
cnt = mid
left = mid +1
elif ds > n:
right = mid -1
else:
cnt = mid
break
print(cnt)
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค | ํ๋ก๊ทธ๋๋จธ์ค | ์ํํฐ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1874๋ฒ: ์คํ ์์ด (0) | 2024.11.11 |
---|---|
[๋ฐฑ์ค] 1436๋ฒ: ์ํ๊ฐ๋ ์ (1) | 2024.11.09 |
[๋ฐฑ์ค] 24444๋ฒ: ๋๋น ์ฐ์ ํ์1 / ๋๋น์ฐ์ ํ์ BFS (0) | 2024.11.05 |
[ํ์ด์ฌ] 24479๋ฒ: ๊น์ด ์ฐ์ ํ์1 / ๊น์ด์ฐ์ ํ์ DFS (0) | 2024.10.31 |
[ํ์ด์ฌ] 1072๋ฒ: ๊ฒ์ / ๋ธ๋ฃจํธํฌ์ค ์ด๋ถํ์ (0) | 2024.10.28 |