https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
풀이
#include <stdio.h>
int main() {
int a, b, v;
scanf("%d %d %d", &a, &b, &v);
// 홀수일때
if ((v - b) % (a - b) != 0)
// +1 해서 출력
printf("%d\n", (v - b) / (a - b) + 1);
// 짝수일때
else printf("%d\n", (v - b) / (a - b));
return 0;
}
처음에는 시간제한 조건을 보지않고 while과 같은 반복문을 써서 풀었다.
당연히 틀렸고 시간제한 조건을 보니 0.25초.
시간복잡도가 O(1)이내에 풀어야하므로 반복문을 사용하면 초과해버린다.
그렇기에 수식을 만들어 푸는 방법을 택했다.
하루에 (a-b)미터씩 v까지 올라간다.
(a-b)+(a-b)+......+(a-b) = v
하지만 마지막날엔, 그러니까 a를 더했을때 v가 된다면 -b를 하지않고 그대로 간다.
(a-b)+(a-b)+......+(a-b) = v - b
이렇게 하게 된다면 조건은 성립된다.
(a-b)의 횟수가 일수가 됨으로 (v-b)/(a-b)를 하게 되면 일수가 나온다.
다만 v-b가 홀수일때는 하루를 더해줘야 하니까 홀수, 짝수 조건으로 나눠 푼다.
'코딩 > 백준 문제 (브론즈)' 카테고리의 다른 글
[백준/5073/C언어] 삼각형과 세 변 _ 풀이 (0) | 2023.09.01 |
---|---|
[백준/10101/C언어] 삼각형 외우기 _ 풀이 (0) | 2023.09.01 |
[백준/9063/C언어] 대지 _ 풀이 (0) | 2023.08.31 |
[백준/2581/C언어] 소수 _ 풀이 (2) | 2023.08.28 |
[백준/1978/C언어] 소수찾기 _ 풀이 (2) | 2023.08.28 |