1. idea
  • 3으로 나누어 떨어지는 최소 수가 될 때까지 5로 나누기
  • while(N%3!=0) 해서 계속 돌되, 우선 5랑 공배수인거 빼야되니까 N%5==0, 앞에서 거르고, 5보다 작을때 한번 걸러주면 5보다 크되, 5로 딱 나누어떨어지지는 않는 수를 가지고 와서 while을 돌면서 5를 먼저 최대한 많이 하고 나머지에 3을 넣어줄 수 있도록 함

 

2. 코드 전문

#include <iostream>
using namespace std;

int main(){
    int N, cnt;
    cin >> N;
    if(N%5 == 0) cnt = N/5;
    else if(N<5) cnt = N==3? 1 : -1;
    else {
        cnt = 0;
        while(N%3 !=0){
            N -= 5;
            cnt++;
        }
        cnt += N/3;
    }
    cout << cnt << endl;
}

잉 왜 틀렸지

3. 수정해보기

아 66넣으면 14되어야되는데 22 나온다

아예 그럼 5로 꽉 채운다음에 남는거에서

3으로 안나눠떨어지면 계속 나눠질때까지 +5하고 cnt에서 --하고, 마지막에 N/3을 더하면 되지 않을까??

#include <iostream>
using namespace std;

int main(){
    int N, cnt;
    cin >> N;
    if(N<5) cnt = N==3? 1 : -1;
    else {
        cnt = N/5;
        N = N%5;
        
        while(N%3!=0){
            N += 5;
            cnt--;
        }
        cnt += N/3;
    }
    cout << cnt << endl;
}

아까보다는 많이 맞긴 하는데 뭐가 문제일까?

예외상황 7!!! cnt가 음수가 될 수 있음

#include <iostream>
using namespace std;

int main(){
    int N;
    cin >> N;
    
    int cnt = N/5;
    int num = N%5;
    
    while(cnt >=0 && num%3 != 0){
        num +=5;
        cnt--;
        if(cnt == -1){
            cout << -1 << endl;
            return -1; // 이거를 return 0으로 하니까 된다
        }
    }
    cnt += num/3;
    cout << cnt << endl;
    
    return 0;
}

이렇게 하면 런타임에러가 뜬다.....\

return -1; // 이부분을 return 0으로 하니까 된다

 

왜그런지 알아봤는데

return -1; 자체가 문법 오류는 아니지만,

문제에서 요구한 입출력 조건을 벗어나거나, 특정 플랫폼에서 오작동을 유발할 수 있어서 런타임 에러처럼 처리되는 것!

 

1. C++의 main 함수에서 return 값 의미

  • main() 함수는 프로그램 종료 시 운영체제에 결과를 알려주는 역할을 함.
  • return 0은 정상 종료를 의미.
  • return -1은 비정상 종료로 해석가능
    • 운영체제나 채점 시스템에 따라 에러 코드처럼 처리됨.
    • 특히 백준 같은 온라인 채점 시스템에서는 return -1이 런타임 에러(RE)로 잡히기도 함.
return 0; 정상 종료 ✅ 안전
return -1; 에러 종료 (OS에 따라) ⚠️ 주의 (백준 등에서 RE 가능성)
cout << -1; 출력으로 -1 사용 ✅ 안전 (출력값만 요구할 때)

 

  • main() 함수에서는 출력값을 cout으로 내보내고,
    종료는 항상 return 0;으로 해주는 것이 가장 안전하고 보편적인 방법
  • return -1;은 테스트/디버깅용으로는 사용해도 되지만, 제출용 코드에서는 피하는게 좋을듯!

+ Recent posts