본문 바로가기

알고리즘 공부/백준 > Python3

[백준 파이썬] #2869: 달팽이는 올라가고 싶다

https://www.acmicpc.net/problem/2869

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

[정답]

import sys

 

A,B,V=map(int,sys.stdin.readline().split())

day=0

day=(V-B)/(A-B)

if day==int(day):
    print(int(day))
else:
    print(int(day)+1)


[오답 → 시간 초과]

import sys

 

A,B,V=map(int,sys.stdin.readline().split())

position,date=0,0

while True:
    date+=1
    position+=A
    if position>=V:
        break
    position-=B
print(date)

 

제한시간이 0.15초이다..

sys.stdin.readline()을 사용했는데도 시간 초과가 되었다.

구글링을 해보면 이렇게 시간이 짧을 경우 부등호가 들어가면 안 된다고 한다.


day=(V-B)/(A-B)

case 1) A=2/ B=1/ V=5 → day=4 → 4일

case 2) A=3/ B=1/ V=8 → day=3.5 → 4일

day가 소수점이 나오는 경우가 있기 때문에 이를 처리해주어야 한다.

 

if day==int(day): 
    print(int(day)) 
else: 
    print(int(day)+1)

day가 case1처럼 자연수일 때, int(day)를 출력해준다. (그냥 day로 하면 float형태로 나오니 꼭 int형으로 바꾸어준다.)

day가 case2처럼 정수일 때, int(day)+1을 해서 출력해준다.