오늘의 문제
전자레인지
나의 풀이
#include <iostream>
#include <vector>
using namespace std;
// 전자레인지
void solution(int t){
int time[] = {300, 60, 10};
int num[3];
for(int i=0;i<3;i++){
num[i] = t / time[i];
t = t % time[i];
}
if(t != 0)
cout<<-1<<endl;
else{
for(int i=0;i<3;i++)
cout<<num[i]<<" ";
cout<<endl;
}
}
풀이 법
- 큰 수부터 나눠서 정답을 찾았다. 그렇게 한 이유는 제일 큰 수가 들어갈 수 있는데 넣지 않으면, 나머지로 채워야 하는데 그 수가 제일 큰 것을 넣은것 보다 더 많아지기 때문.
- 그리고 이렇게 풀 수 있었던 것은 큰 수가 작은수의 배수이기 때문이다. 반드시 대체할 수 있기 때문에 이 방법을 쓸 수 있다. 만약 300, 60, 10이 아닌 300, 33, 21 이런거였다면, 답이 달라진다. 이럴때는 나눠진 값을 하나씩 빼보며 대조해봐야한다.
다른 답안
#include<cstdio>
int t;
int main() {
scanf("%d", &t);
printf(t%10?"-1":"%d %d %d",t / 300,t/ 60%5,t/ 10%6);
return 0;
}
배울 점