[ํ์ด์ฌ] 1072๋ฒ: ๊ฒ์ / ๋ธ๋ฃจํธํฌ์ค ์ด๋ถํ์
1. ๋ฐฑ์ค 1072๋ฒ ๊ฒ์
https://www.acmicpc.net/problem/1072
2. ์ค๋์ ํ๊ณ
* ์ ๋ต์ ์๋์ ์์ต๋๋ค.
์ฒซ๋ฒ์งธ ์ ๊ทผ: ๋จ์ ๊ตฌํ ์๊ฐ์ด๊ณผ
ํ์ด์ฌ ์์์ ํจ์
๋ฐ์ฌ๋ฆผ num = f " {num: .2f} " ์์์ 3์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ์ฌ 2์๋ฆฌ๊น์ง ์ถ๋ ฅ
๋ฒ๋ฆผ math.floor(num)
์ฌ๋ฆผ math.ceil(num)
import math
x,y = map(int, input().split())
z = (y/x)*100
z = math.floor(z)
i = 1
if x<=y:
print(-1)
else:
if y==0:
while True:
z1 = ((y+i)/(x+i))*100
z1 = math.floor(z1)
if z1>=1:
print(i)
break
else:
i = i+1
else:
while True:
z1 = ((y+i)/(x+i))*100
z1 = math.floor(z1)
if z1 > z:
print(i)
break
else:
i = i+1
๋๋ฒ์งธ ์ ๊ทผ: ์ด๋ถํ์ ์ฑ๊ณต
x์ ๋ฒ์๊ฐ 10์ต์ธ ๊ฒ์ ๋ณด๊ณ ํ์๋ฒ์๋ฅผ ์ขํ์ผ ํ๋ค๋ ์๊ฐ์ด ํ์ํ๋ค.
์ผ๋ง๋ฅผ ๋ํ ์ง 1๋ถํฐ ๋๋ ค๊ฐ๋ ๊ฒ์ด ์๋๋ผ ์ด๋ถํ์์ ์ด์ฉํด mid๋ฅผ ์ค์ ํ ๋ฒ์๋ฅผ ์ขํ๊ฐ์ผ ํ๋ค.
* math.floor๋ฅผ ์ฌ์ฉํด ์์์ ๋ฒ๋ฆฌ๊ธฐ
z = (y / x) * 100
z = math.floor(z)
* ์ ์ ๋๋์ ์ ์ฌ์ฉํด ์์์ ๋ฒ๋ฆฌ๊ธฐ(๋น์ฐํ ๊ฒ์ด์์)
z = (y * 100) // x
import math
x,y = map(int, input().split())
z = (y * 100) // x
z = math.floor(z)
i = 0
if z>=99:
print(-1)
else:
low, high = 1, 1000000000
while low<=high:
mid = (low + high) // 2
z1 = ((y + mid) * 100) // (x + mid)
z1 = math.floor(z1)
if z1 > z:
i = mid
high = mid-1
else:
low = mid+1
print(i)
์ด๋ถํ์์ ํตํด mid์ ๊ฐ์ ์ขํ๊ฐ๊ณ z1 (mid๊ฐ์ ๋ํ ์๋ก์ด ํ๋ฅ ) ๊ฐ์ด z (์๋ ํ๋ฅ ) ๋ณด๋ค ์ปค์ง๋ฉด i ๊ฐ์ ์ ์ฅํ๋ค. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ low ๊ฐ์ด high ๊ฐ๊ณผ ๊ฐ๊ฑฐ๋ ์ปค์ง ๊ฒฝ์ฐ while ๋ฌธ์ ๋น ์ ธ๋์จ๋ค. ์ต์ข ์ ์ผ๋ก while๋ฌธ์ ๋น ์ ธ๋์ฌ ๋ ์ ์ฅ๋ i ๊ฐ์ด ์ต์ ๊ฐ ( = ์ต์ ๋ช ํ ๋ ํด์ผํ๋์ง) ์ด ๋๋ค.