반응형
#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 |