티스토리 뷰

반응형

달팽이는 올라가고 싶다 성공다국어

한국어   
시간 제한메모리 제한제출정답맞힌 사람정답 비율
0.15 초 (추가 시간 없음) (하단 참고) 128 MB 148049 41127 34822 29.064%

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

예제 입력 1 복사

2 1 5

예제 출력 1 복사

4

예제 입력 2 복사

5 1 6

예제 출력 2 복사

2

예제 입력 3 복사

100 99 1000000000

예제 출력 3 복사

999999901
#include <iostream>
#include <cstring>


using namespace std;
int main(void)
{
	int a, b, c;
	cin >> a >> b >> c;
	int sum = 0;
	int cnt = 0;
	while (1)
	{
		cnt++;
		sum +=a;
		if (sum >= c)
		{
			cout << cnt;
			break;
		}
		else
			sum -= b;
		
	}
	return 0;
}

 

처음에 짠 코드..

 

시간초과됐다.

 

반복문을 쓰지않고 문제를 풀어야한다고 한다.

 

 

#include <iostream>
#include <cstring>


using namespace std;
;
int main() {
    int A, B, V;
    cin>>A>>B>>V;
    int day;

    if ((V - A) % (A - B) == 0)
        day = (V - A) / (A - B);
    else
        day = (V - A) / (A - B) + 1;

    printf("%d\n", day + 1);

}

 

유투브에 ENTP 컴공석사님의 영상을 참고했다.

 

우선 반복문을 쓰지않고 단순 연산을 해야한다.

 

1) V-A를 빼면 올라가야하는 거리가 나온다. 

2) 이것을 (A-B)로 나눠주는데, 이게 딱 하루 전 날 까지 구해야한다.

왜냐하면 올라간 날 까지하면 -B를 해버려서 정상에 도착하면 -B를 안한다고 했는데, 이것이 빠져버린다.

 

즉 하루 전 날 까지 필요한 날을 구하고 거기서 +1일을 해버리면 이것이 바로 정답.

 

3) 근데 딱 하루 전에 도달하는 경우가 있지만, 그 보다 약간 못 미치게 도달하는 경우가 있다. 그럴 경우는 하루를 더 가야한다.

 

10의 거리를 가면 하루에 3씩 가고 1씩 떨어진다고 하면, 3일을 가면 9에 거리를 간다. 하지만 -1씩 3일을 했기에 하루가 더 필요하다.

반면 5씩간다면, 2일이면 도달하고 도중에 -1이 되서 9의 높이에 있다. 그렇기에 하루만 더 가면 된다.

 

이 경우를 나누어서 작성해준다.

 

 

 

 

반응형

'프로그래밍 > 백준 문제풀이' 카테고리의 다른 글

2839 설탕배탈(C/C++)  (0) 2022.06.24
백준 10250 ACM호텔 C/C++  (1) 2022.05.08
1193 백준 분수 찾기 C/C++  (0) 2022.05.07
백준 2292 벌집 C/C++  (0) 2022.05.06
백준 1712 손익분기점 C/C++  (0) 2022.05.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함
반응형