728x90
- 문제를 보고 바로 생각한것은 그냥 반복문 쓰면 빠르게 해결될 것이다? 라는 생각이였다.
- 하지만 반복문으로 해본 결과 시간제한 1초가 나왔고, 문제에서는 시간제한이 0.25초 였던 것이다.
a, b, v = map(int, input().split()) x, y = 0, 0 def func(a, b, v): global x, y while True: y += 1 x += a if x >= v: return y else: x -= b print(func(a, b, v)) |
위 코드가 반복문을 사용해서 했던 코드이다.
- 나의 경우는 시간초가 짧은 문제들은 공식화 해서 풀거나 삼항연산자를 많이 이용했던 것 같다.
- 이 문제에서는 구하려고 하는 것이 결국은 며칠이 걸렸는지 날짜를 구하는 것이다.
- 날짜는 총 거리 / 움직이는 거리 이며, 문제에서 a, b, v로 변수를 지정해 주었으니 하루동안 움직인 거리는 a-b가 되는 것이다.
- 여기서 a는 낮에 올라간 거리, b는 밤에 미끄러지는 거리 이므로, 마지막날 낮에 올라가 목표지점에 도착하게 되면 그 다음날은 b를 빼줄 이유가 없는 것이 핵심인 것 같다.
- day = v/a-b 라고 하면 원하는 값에서 1씩 크게 나오는 오류를 범할 수 있으므로, 높이에 대해 다시 정리하면 v = day * (a-b) + a가 되는 것이다.
- day = (v-a)/(a-b) 인 것이다.
- 여기에 마지막 날은 1로해서 본 식에 더해주면 최종 공식이 완성된다.
- 테스트를 하는 도중 결과값이 정수로 안나오고 실수로 나오는 경우가 발견되었다. (예제 입력 2 를 넣은 경우 1.xxx 이렇게 나옴)
- 1.xxx 의 결과각ㅄ이 나오는 경우는 날짜는 정수이므로 2일이 필요한 것이다 이를 코드에 수정 보안해주었다.
a, b, v = map(int, input().split()) day = (v - a) / (a - b) + 1 print(int(day) if day == int(day) else int(day)+1) |
day == int(day)를 통해 계산된 날이 정확히 정수라면 그대로 출력하고, 소수점이 있다면 하루를 더하여 출력한다.
728x90
'코딩테스트' 카테고리의 다른 글
백준 1193 : 분수찾기 (0) | 2024.09.26 |
---|---|
백준 1062번 가르침 (0) | 2024.09.24 |
백준 2903번 중앙 이동 알고리즘 (0) | 2024.09.23 |
백준 2720번 세탁소 사장 동혁 문제 풀이 (0) | 2024.09.20 |
백준 2745번 진법변환문제 (0) | 2024.09.19 |