반응형
이번에는 기본 수학 1에 관련된 문제에서 제목이 '달팽이는 올라가고 싶다'으로 되어있는 문제를 풀었다. 정답률이 28%대이다.
https://www.acmicpc.net/problem/2869
코딩에 들어가기 앞서 관계식을 따져보자.
나무 막대 길이를 V라고 하고
달팽이가 낮에 올라가는 길이를 A
밤에 미끄러지는 B 라고 하고,
달팽이가 올라간 수를 n이라고 하자.
이때 달팽이가 n일만큼 올라갔다고 했을 때 나오는 관계식은 다음과 같다.
$$A*n - B*(n-1)$$
n에 관련된 식으로 정리한 후 나무 막대 길이 부등식을 붙여보자.
$$n(A-B) + B \geq V$$
좌변을 n만 남기고 전부 정리하면 다음과 같다.
$$n \geq (V - B)/(A-B)$$
물론 부등호에 관련해서 나눗셈은 양수 음수를 따져야 하지만, 이 경우에는 문제에서 이미 자연수만 다루는 걸로 명시되어있으므로 생략해도 무방하다.
이렇게 하고 코딩을 하면 된다. 단 우변이 소수점이 나올 수 있으므로 소수점을 올림을 하거나 소수점 발생하면 1을 더해주는 식을 만들어야 한다.
receive_input = input().split()
snail_climb = int(receive_input[0])
snail_fall = int(receive_input[1])
stick_height = int(receive_input[2])
#우변이 소수점이 발생하는 지 체크한다.
if (stick_height - snail_fall) % (snail_climb - snail_fall) == 0:
#자연수로 떨어진다면, 하루에 갈 수 있는 거리 딱 맞게 나무 막대 정상에 도착한다는 뜻이다.
print((stick_height - snail_fall)//(snail_climb - snail_fall))
else:
# 소수점이 발생하면, 하루에 갈 수 있는 거리 중간에 나무 막대 정상에 도착한다는 뜻이다.
print(((stick_height - snail_fall)//(snail_climb - snail_fall))+1)
이렇게 해결하면 된다. 다만 문제 해결 중 오류가 떴었는데, 식을 정리하지 않고 반복문으로 해결을 해서 오류가 발생했다. 아마 이러한 이유로 사람들이 많이 오류 났던 것 같다.
반복문을 최대한 사용하지 않고 식을 먼저 정리하는 습관을 가져야 할 것 같다.
728x90
'Study > 백준코테' 카테고리의 다른 글
7. 백준 코딩테스트 10250번 문제 python (0) | 2021.09.23 |
---|---|
6. 백준 코딩테스트 2839번 문제 python (0) | 2021.09.23 |
4. 백준 코딩테스트 1712번 문제 python (0) | 2021.09.16 |
3. 백준 코딩테스트 1157번 문제 python (0) | 2021.09.15 |
2. 백준 코딩테스트 4344번 문제 python (0) | 2021.09.13 |