2022. 1. 29. 18:44ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
접근 방법 - 수학적 사고력을 필요로 하는 문제
백준의 2869번 문제는 수학적 사고력을 이용해야 하는 문제이다.
해당 문제에선 달팽이가 올라가는 길이와 미끄러지는 길이를 통해, 정상에 오르는 데에 필요한 일수를 구하면 된다.
다만, 이 문제를 해결할 때 정상에 오른 뒤엔 미끄러지지 않는다는 점을 유의해야 한다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 올라가는 길이(a), 미끄러지는 길이(b), 총길이(v)를 입력받는다.
2) d를 선언하여 아래처럼 초기화한다.
- a - b : 하루 동안 올라가고 미끄러지는 길이
- v - b : 달팽이가 올라야 하는 총길이
(달팽이는 정상에 오르면 더 이상 미끄러지지 않는다. 따라서 달팽이가 등반하는 마지막 날에는 이제 미끄러지지 않기 때문에 총길이에서 마지막 날 미끄러지는 길이를 빼야 한다.)
3) 다만, 만일 (v-b)%(a-b)의 값이 0이 아니라면 d에 1을 추가한다.
(어느 하루 낮까지 총 올라간 길이가 v가 아닌 v-b라면 정상에 도착한 것이 아니다. 따라서 밤에 미끄러질 수 있으니 그다음 날에 정상에 도착할 것이다. 따라서 1을 더해주어야 한다.)
4) 최종적으로 저장된 d 값을 출력한 뒤 실행 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
//백준 2869번 코드
int main() {
int a, b, v;
scanf("%d %d %d", &a, &b, &v);
int d = (v - b) / (a - b);
if ((v - b) % (a - b) != 0) { d++; }
printf("%d", d);
}
제출 결과
(2021.12.20 백준 2869번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 2908번 상수 (C언어) (0) | 2022.01.30 |
---|---|
[백준 BOJ] 2884번 알람 시계 (C언어) (0) | 2022.01.30 |
[백준 BOJ] 2864번 5와 6의 차이 (C언어) (0) | 2022.01.29 |
[백준 BOJ] 2798번 블랙잭 (Java) (0) | 2022.01.29 |
[백준 BOJ] 2775번 부녀회장이 될테야 (C언어) (0) | 2022.01.28 |