티스토리 뷰

#include <stdio.h>

int main(void)
{
	long long int x, t;
	scanf("%lld %lld", &x, &t);
	
	//single 0>1, 0>4, 0>8
	if(t >= x) {
		printf("1\n%lld 1", t-x);
		return 0;
	} 
	
	if(t >= x/4 && x%4 == 0) {
		printf("1\n%lld 4", t-x/4);
		return 0;
	}
	
	if(t >= x/8 && x%8 == 0) {
		printf("1\n%lld 8", t-x/8);
		return 0;
	}
	
	//double 0>4>1, 0>8>1, 0>8>4
	if(t >= x/4+x%4) {
		printf("2\n%lld 4\n", t-x/4-x%4);
		printf("%lld 1", t-x%4);
		return 0;
	}
	
	if(t >= x/8+x%8) {
		printf("2\n%lld 8\n", t-x/8-x%8);
		printf("%lld 1", t-x%8);
		return 0;
	}
	
	if(x%4 == 0 && t >= x/8+(x%8)/4) {
		printf("2\n%lld 8\n", t-x/8-(x%8)/4);
		printf("%lld 4", t-(x%8)/4);
		return 0;
	}
	
	//triple
	if(t >= x/8 + (x%8)/4 + (x%8)%4) {
		printf("3\n%lld 8\n", t-x/8-(x%8)/4-(x%8)%4);
		printf("%lld 4\n", t-(x%8)/4-(x%8)%4);
		printf("%lld 1", t-(x%8)%4);
		return 0;
	}
	printf("-1");
}

 

 

https://www.acmicpc.net/problem/25597

 

25597번: 푸앙이와 러닝머신

주어진 시간동안 정확히 목표 거리를 이동하는 것이 가능하다면, 첫 번째 줄에 버튼을 눌러야 하는 최소 횟수 $N$을 출력하고, 다음 $N$개의 줄에 걸쳐 버튼을 누르는 시각과 버튼의 종류를 공백

www.acmicpc.net

 

풀이 : 버튼을 누를  수 있는 모든 경우의 수를 조건문으로 구현

버튼 한 번만 누르는 경우 : 1, 2, 3

버튼 두 번 만 누르는 경우 : 2->1, 3->1, 3->2

버튼 다 누르는 경우 : 3->2->1

 

ex) 13 13

8 -> 4 -> 1 -> 0을 눌러도 3초 만에 목표 거리에 도달할 수 있으나,

최소한으로 눌러야 하므로 1만 눌러야 한다.

 

위의 조건을 구현 할 때도

1번만 누르는 경우 -> 2번 누르는 경우 -> 3번 누르는 경우 순으로 조건에 맞는지를 확인해야 한다.

모든 경우에 속하지 않으면 -1을 출력하면 된다.

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함