๋–ก๋ณถ์ด ๋–ก ๋งŒ๋“ค๊ธฐ(Python)

2020. 8. 31. 14:30ใ†์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค/ํƒ์ƒ‰

๋–ก๋ณถ์ด ๋–ก ๋งŒ๋“ค๊ธฐ(Python)

 

 

๋ฌธ์ œ : ์˜ค๋Š˜ ๋™๋นˆ์ด๋Š” ์—ฌํ–‰ ๊ฐ€์‹  ๋ถ€๋ชจ๋‹˜์„ ๋Œ€์‹ ํ•ด์„œ ๋–ก์ง‘ ์ผ์„ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์˜ค๋Š˜์€ ๋–ก๋ณถ์ด ๋–ก์„ ๋งŒ๋“œ๋Š” ๋‚ ์ด๋‹ค. ๋™๋นˆ์ด๋„ค ๋–ก๋ณถ์ด ๋–ก์€ ์žฌ๋ฐŒ๊ฒŒ๋„ ๋–ก๋ณถ์ด ๋–ก์˜ ๊ธธ์ด๊ฐ€ ์ผ์ •ํ•˜์ง€ ์•Š๋‹ค. ๋Œ€์‹ ์— ํ•œ๋ด‰์ง€ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ๋–ก์˜ ์ด ๊ธธ์ด๋Š” ์ ˆ๋‹จ๊ธฐ๋กœ ์ž˜๋ผ์„œ ๋งž์ถฐ์ค€๋‹ค.

์ ˆ๋‹จ๊ธฐ์— ๋†’์ด(H)๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ค„์ง€์–ด์ง„ ๋–ก์„ ํ•œ ๋ฒˆ์— ์ ˆ๋‹จํ•œ๋‹ค. ๋†’์ด๊ฐ€ H๋ณด๋‹ค ๊ธด ๋–ก์€ H ์œ„์˜ ๋ถ€๋ถ„์ด ์ž˜๋ฆด ๊ฒƒ์ด๊ณ , ๋‚ฎ์€ ๋–ก์€ ์ž˜๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด ๋†’์ด๊ฐ€ 19, 14, 10, 17cm์ธ ๋–ก์ด ๋‚˜๋ž€ํžˆ ์žˆ๊ณ  ์ ˆ๋‹จ๊ธฐ ๋†’์ด๋ฅผ 15cm๋กœ ์ง€์ •ํ•˜๋ฉด ์ž๋ฅธ ๋’ค ๋–ก์˜ ๋†’์ด๋Š” 15, 14, 10, 15cm๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์ž˜๋ฆฐ ๋–ก์˜ ๊ธธ์ด๋Š” ์ฐจ๋ก€๋Œ€๋กœ 4, 0, 0, 2cm์ด๋‹ค. ์†๋‹˜์€ 6cm๋งŒํผ์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ ธ๊ฐ„๋‹ค.

์†๋‹˜์ด ์™”์„ ๋•Œ ์š”์ฒญํ•œ ์ด ๊ธธ์ด๊ฐ€ M์ผ ๋•Œ ์ ์–ด๋„ M๋งŒํผ์˜ ๋–ก์„ ์–ป๊ธฐ ์œ„ํ•ด ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ๋–ก์˜ ๊ฐœ์ˆ˜ N๊ณผ ์š”์ฒญํ•œ ๋–ก์˜ ๊ธธ์ด M์ด ์ฃผ์–ด์ง„๋‹ค.(1<=N<=1,000,000, 1<=M<=2,000,000,000)
  • ๋‘˜์งธ ์ค„์—๋Š” ๋–ก์˜ ๊ฐœ๋ณ„ ๋†’์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋–ก ๋†’์ด์˜ ์ดํ•ฉ์€ ํ•ญ์ƒ M ์ด์ƒ์ด๋ฏ€๋กœ, ์†๋‹˜์€ ํ•„์š”ํ•œ ์–‘๋งŒํผ ๋–ก์„ ์‚ฌ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋†’์ด๋Š” 10์–ต๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์–‘์˜ ์ •์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

์ถœ๋ ฅ ์กฐ๊ฑด

  • ์ ์–ด๋„ M๋งŒํผ์˜ ๋–ก์„ ์ง‘์— ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฌธ์ œ ํ’€์ด

์ด ๋ฌธ์ œ๋Š” ๋„์ €ํžˆ ๊ฐ์ด ์•ˆ์™€์„œ ์งง์€์‹œ๊ฐ„ ๊ณ ๋ฏผํ›„์— ํ’€์ด๋ฅผ ์ฐพ์•„๋ณด์•˜๋‹ค. 

ํ’€์ด์—๋Š” ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜๋ผ๋Š” ๊ฐœ๋…์ด ๋“ฑ์žฅํ•˜๋Š”๋ฐ, ์ด๋Š” '์ตœ์ ํ™” ๋ฌธ์ œ๋ฅผ ๊ฒฐ์ • ๋ฌธ์ œ'๋กœ ๋ฐ”๊พธ์–ด ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  '100๋งŒ๊ฐœ์˜ ๋–ก์ด ์ฃผ์–ด์ง€๋Š”๋ฐ ์ด๊ฑธ ํ•˜๋‚˜ํ•˜๋‚˜ ์–ด๋–ป๊ฒŒ ๋„ฃ์ง€?' ์ƒ๊ฐ์„ ํ–ˆ๋Š”๋ฐ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๋˜์—ˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜์—ˆ๋Š”์ง€ ์‚ดํŽด๋ณด์ž.

 

์ ˆ๋‹จ๊ธฐ์˜ ๋†’์ด๋Š” 1๋ถ€ํ„ฐ 10์–ต๊นŒ์ง€์˜ ์ˆ˜์ด๋‹ค. ์ด๋Š” ๋Œ€๋‹จํžˆ ํฐ์ˆ˜๋ผ๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๊ณ , ์šฐ๋ฆฌ๋Š” ์ ˆ๋‹จ๊ธฐ์˜ ๋†’์ด๋ฅผ ์ค‘์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋‚˜๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ง„ ํƒ์ƒ‰์„ ๋– ์˜ฌ๋ ธ์–ด์•ผ ํ•œ๋‹ค. ์ˆœ์ฐจํƒ์ƒ‰์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณด๋ฉด ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋Š” 1๋ถ€ํ„ฐ 10์–ต๊นŒ์ง€ 10์–ต๋ฒˆ์˜ ๋น„๊ต์™€ ๋–ก์˜ ๊ฐœ์ˆ˜๊ฐ€ 100๋งŒ๊ฐœ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ง๋„ ์•ˆ๋˜๋Š” ๊ฐ’์ด ๋‚˜์˜จ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ด ๋ฌธ์ œ๋Š” ๋ฐ˜๋“œ์‹œ ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ํ’€์–ด์•ผ๋งŒ ํ•œ๋‹ค.

 

์ด์ง„ ํƒ์ƒ‰์ด๋ผ๋ฉด ๋†’์ด๊ฐ€ 10์–ต๊นŒ์ง€์˜ ๊ฒฝ์šฐ์—๋„ ๋Œ€๋žต 31๋ฒˆ๋งŒ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋‹ค. (log10์–ต์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.) ๊ทธ ์ˆ˜์— ๋–ก์˜ ๊ฐœ์ˆ˜๊ฐ€ 100๋งŒ๊ฐœ๋ผ๊ณ  ํ•ด๋„ ์•ฝ 3000๋งŒ ๋ฒˆ ์ •๋„์˜ ์—ฐ์‚ฐ์œผ๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

๋ฌธ์ œ ํ•ด๊ฒฐ

1. start์™€ end๋ฅผ ๊ฐ€์žฅ ๊ธด ๋–ก์„ ๊ธฐ์ค€์œผ๋กœ ์ •ํ•œ๋‹ค. (start=0, end=๊ฐ€์žฅ ๊ธด๋–ก์˜ ๊ธธ์ด)--->๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

2. mid๊ฐ’์œผ๋กœ ๋‹ค ์ž๋ฅธ ๋’ค ๋‚จ๋Š” ๋–ก์˜ ๊ธธ์ด์˜ ์ดํ•ฉ์ด ์š”๊ตฌํ•˜๋Š” ๋–ก์˜ ๊ธธ์ด๋ณด๋‹ค ์ž‘๋‹ค๋ฉด end๋ฅผ mid-1๋กœ ์ฃผ์–ด ๋‹ค์‹œ start์™€ end๋ฅผ ํ†ตํ•ด mid๋ฅผ ์„ค์ •ํ•œ๋‹ค. ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ์—๋Š” start๋ฅผ mid+1๋กœ ์ฃผ๋ฉด ๋œ๋‹ค.

3. ์ ˆ๋‹จ๊ธฐ ๋†’์ด์˜ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋–ก์˜ ๊ธธ์ด๊ฐ€ ๊ฐ™์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๋Œ€์‹ ์— ๋–ก์ด ๋” ๋งŽ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผํ•œ๋‹ค. ๋•Œ๋ฌธ์— ๋–ก์ด ๋‚จ๋Š” ๊ฒฝ์šฐ์—๋Š” result = mid๋ฅผ ๋จผ์ € ์ฃผ์–ด์•ผํ•œ๋‹ค. 

 

์†Œ์Šค ์ฝ”๋“œ

n,m = map(int,input().split())
array = list(map(int, input().split()))


result = 0
start =0
end = max(array)

while (start <= end):
  mid = (start+end)//2
  total =0

  for i in array:
    if i > mid :
      total += i-mid
    
  if total < m :
    end = mid-1
  else :
    result = mid
    start = mid+1

print(result)

 

 

๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ์•Œ๊ฒŒ ๋œ ์ 

๋–ก์˜ ๊ฐœ๋ณ„ ๋†’์ด๋Š” array = list(map(int,input()))์„ ํ†ตํ•ด ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‚ด๊ฐ€ ํ–ˆ๋˜ ํ’€์ด : 
box=0
for i in input().split():
  (box++) = i  -->ํŒŒ์ด์ฌ์—์„œ ์˜ค๋ฅ˜ ++์—ฐ์‚ฐ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ start๊ฐ€ end๋ณด๋‹ค ํฌ๋ฉด ๋ฐ”๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์ด์ง„ํƒ์ƒ‰๋ฌธ์ œ์— ์žˆ์–ด ์ด ๊ฐœ๋…์ด ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ˆซ์ž๋ฅผ ๋Œ€์ž…ํ•ด ํ•ด๋ณด๋Š” ๊ฑธ ์ถ”์ฒœํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์— else๋ฌธ์— total์ด ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋กœ ์ฃผ๋Š” ๊ฒƒ์ด ๋งž๋‹ค. toal๊ณผ m์ด ๊ฐ™์„ ๋•Œ ์ข…๋ฃŒํ•˜๋Š” ๊ฑด
๋‹น์—ฐํ•˜๊ณ , ์ฐจ๋ผ๋ฆฌ total์ด ์š”๊ตฌํ•œ ๊ฐ’๋ณด๋‹ค 1์ด๋ผ๋„ ๋” ํฐ๊ฒƒ์ด ์ตœ๋Œ€๊ฐ’์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์ด์ง„ํƒ์ƒ‰ ์ฝ”๋“œ๋Š” ์ƒ๋‹นํžˆ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ์™ธ์›Œ์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.