알고리즘/그리디 알고리즘

[백준] 10162 - 전자레인지

TIM_0529 2023. 1. 25. 13:06
반응형
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
	int b_t[3] = { 300,60,10 };
	int t;
	scanf("%d", &t);
	if (t % 10 == 0)
	{
		for (int i = 0; i < 3; i++)
		{
			int c = t / b_t[i];
			t %= b_t[i];
			printf("%d ", c);
		}
	}
	else
		printf("-1");
	
}

이 문제는 그리디를 사용하는 기본적인 문제이지만 약간의 조건이 있습니다.

 


출력

여러분은 T초를 위한 최소버튼 조작의 A B C 횟수를 첫 줄에 차례대로 출력해야 한다. 각각의 횟수 사이에는 빈 칸을 둔다. 해당 버튼을 누르지 않는 경우에는 숫자 0을 출력해야한다. 만일 제시된 3개의 버튼으로 T초를 맞출 수 없으면 음수 -1을 첫 줄에 출력해야 한다. 


- 각 버튼의 빈도수와 타이머 셋팅 가능 여부를 출력하라는 말입니다.

 

1) 우선 셋팅이 가능한지 알아보기 위해서는 가장 작은 단위로 나누었을 때 0이 나온다면 셋팅이 가능한 숫자 입니다. 만약 0이 아니라면 -1을 출력하게 합니다.

 

2)  for 문을 돌면서 주어진 시간 ( b_t ) 로 나누어서 몫을 출력 합니다. 몫이 누른 횟수가 됩니다.

 

이번 문제는 총합을 출력하는게 아니기 때문에 저장할 필요가 없어서 카운트 변수 c 를 for문 안에 지역변수로 만들었습니다.

 


#include<cstdio>
main(){int t;scanf("%d",&t);
	if(t%10)printf("-1");
	else printf("%d %d %d",t/300,t%300/60,t%300%60/10);}

다른 사람의 코드입니다.

 

for 문 사용 없이 바로 printf 함수에서 나머지 연산을 사용해서 풀었습니다. 코드 길이가 많이 줄었고 직관적으로 이해하기 편한 코드인 것 같습니다,  

반응형

'알고리즘 > 그리디 알고리즘' 카테고리의 다른 글

[벡준] 13365 - 주유소  (0) 2023.01.30
[백준] 1789 - 수들의 합  (0) 2023.01.25
[백준] 2217 - 로프  (0) 2023.01.24
[백준] 1931 - 회의실 배정  (0) 2023.01.19
[백준] 11047 - 동전 0  (2) 2023.01.18