[코딩테스트 C++] 전자레인지

후이재·2020년 10월 14일
0

오늘의 문제

전자레인지

나의 풀이

#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;
}

배울 점

  • 그러니 이렇게 한줄도 가능하다
profile
공부를 위한 벨로그

0개의 댓글