Code&Data Insights

BaekJoon Algorithm - Stage 8 [1712, 2869] ( Python 3 ) 본문

Algorithm/BaekJoon Online Judge

BaekJoon Algorithm - Stage 8 [1712, 2869] ( Python 3 )

paka_corn 2022. 1. 18. 11:28

 

 

 

 

2022.01.21

 

# Stage 8 - [ 1712]

 

[1712] - 손익분기점 

[first code]

 

a,b,c = map(int, input().split())

n = 0
    
while True:
    if a + (b*n) == (c*n):
        print(n+1)
        break
    elif b > c:
        print(-1)
        break
        
    n += 1
   

--->  이렇게 하니까 예제 1,2번은 통과인데

마지막 숫자 큰 예제는 아웃풋 안나오고, 백준에서 시간초과가 떴다. 

 

 

[new code]

 

a,b,c = map(int, input().split())
b_e_point = 0

if (b >= c):
    print(-1)

else:
    b_e_point = (a // (c-b)) + 1
    print(b_e_point)

 


    

 

---> 처음에 if(b > c)로만 했더니 계속 ZeroDivision ERROR가 떠서 

try-except 문으로 에러 제거 하니까 컴파일 에러가 떴다. 

if 조건을 b>=c로 바꾸니까 바로 정답! 

엄청 고민했던 문젠데 나름 쉽게 풀린거 같다.

 

 

 

 

 

 

 

 

# Stage 8 - [ 2869 ]

[ 2869 ] -  달팽이는 올라가고 싶다 

 

[my code - (1)]

 

a,b,v = map(int, input().split())
h = 0 
day = 0
        
  
for i in range(v):
    
    h += a 
    
    h -= b
    
    if h == v:
        print(day)
        break
    elif h > v:
        day += 1
        print(day)
        break
    
    else:
          day += 1

 

--->  또 시간초과 뜸 ㅠㅠ

아웃풋 적은 수는 정답인데 큰수 넣으니까 안나왔다..

위에거처럼 더 간단한 수식을 생각해야 하는듯..

 

 

 

 

[my code - (2)]

 

import sys

a,b,v = map(int, sys.stdin.readline().split())
h = 0 
day = 0
        
  
for i in range(v):
    
    h += a 
    
    h -= b
    
    if h == v:
        print(day)
        break
    elif h > v:
        day += 1
        print(day)
        break
    
    else:
        day += 1

 

 

 

---> 반복문은 써야될거 같아서 어떻게 바꿀지 몰라서

일단 input()을 sys.stdin.readline()으로 바꿧는데 역시 시간초과.. 

 

 

달팽이야 그냥 올라가지 마라... 

거의 두시간 동안 고민하다가 반복문 아니면 풀 방법을 모르겠어서 구글링했는데 역시

전 문제처럼 수학으로 푸는거였다.. 

답을 봐도 어렵다..^^ 

 

[정답]

 

import sys

a,b,v = map(int, sys.stdin.readline().split())

if(v-b)%(a-b) == 0:
    print((v-b)//(a-b))
else:
    print((v-b)//(a-b)+1)

 

 

 

하하하.....

 

Comments