티스토리 뷰
문제 링크 : https://www.acmicpc.net/problem/11502
#include <bits/stdc++.h>
using namespace std;
int arr[1001];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
for(int i=2; i<1001; i++)
{
if(arr[i]) continue;
for(int j=i*i; j<1001; j+=i)
{
arr[j]=1;
}
}
while(T--)
{
int N;
cin >> N;
bool flag = 0;
for(int i=2; i<=N && !flag; i++)
{
if(arr[i]) continue;
for(int j=2; j<=N && !flag; j++)
{
if(arr[j]) continue;
for(int k=2; k<=N && !flag; k++)
{
if(arr[k]) continue;
if((i+j+k)==N)
{
cout << i << ' ' << j << ' ' << k << '\n';
flag = 1;
}
}
}
}
if(!flag) cout << 0 << '\n';
}
return 0;
}
먼저 주어진 N 범위 이내의 값을 모두 소수 판별하여 배열에 체크해준다.
이후 세개의 소수 및 오름차순 체크이므로 3중 반복문을 통해 각 값이 소수가 맞는지, 그리고 합이 N이 맞는 지 체크한다.
이 경우 맞다면 바로 삼중 반복문의 각 인덱스들을 순서대로 출력해주면 된다.
다른 케이스를 출력하지 않기 위해 flag 변수를 통해 반복문 실행 여부를 제어해주었다.
그리고 불가능한 경우 0을 출력하는 것도 해주어야 한다.
'백준 > 실버' 카테고리의 다른 글
[백준 20186번] 수 고르기 (C++) (0) | 2025.06.29 |
---|---|
[백준 15954번] 인형들 (C++) (0) | 2025.06.26 |
[백준 24039번] 2021은 무엇이 특별할까? (0) | 2025.06.24 |
[백준 2980번] 도로와 신호등 (C++) (0) | 2025.06.24 |
[백준 2622번] 삼각형만들기 (C++) (0) | 2025.06.17 |