백준 1153 네 개의 소수
2023. 1. 25. 15:49ㆍ코딩 공부 연습
반응형
백준 1153 네개의 소수
오늘은 어느 수를 4개의 소수로 표현하는 문제를 풀어보았다.
처음에 문제를 풀기 위해 떠올린 아이디어는 다음과 같다.
- 에라토스테네스의 채로 n 보다 작은 모든 소수들을 찾는다.
- 이 정렬된 소수들을 백트래킹을 하여 4개의 배열을 채우고, 성공한 배열 4개를 출력해준다.
이렇게 푸니 가능한 모든 4개 소수의 조합이 나왔다. 그런데 시간 초과가 나왔고, 이렇게 풀면 안되겠다는 생각을 하게되었다.
구글링을 해서 찾은 방법은 다음과 같다.
- 골드바흐의 추측
골드바흐의 추측은, 2보다 큰 모든 짝수는 두개의 소수 합으로 나타낼 수 있다는 추측으로, 누구가 증명했다ㅋㅋ
암튼, 이 원리를 이용하기 위해 n이 홀수 이면 2, 3 을 쓰고 n-5 에 대해 두개의 소수의 합을 찾고,
n이 짝수이면 2,2 를 쓰고 n-4에 대해 두개의 소수 합을 찾으면 되는 것이다.
구현은 어렵지 않았는데, 백트래킹을 갈기느라 허비한 시간이 너무 길어서 아쉬웠다!
for (int i = 0; i < sosu_list.size(); i++)
{
int first = sosu_list[i];
int second = n - first;
if (sosu_pack.find(second) != sosu_pack.end())
{
cout<<first << " " << second << '\n';
return 1;
}
}
return -1;;
'코딩 공부 연습' 카테고리의 다른 글
백준 10826 피보나치 수 4 (0) | 2023.02.14 |
---|---|
백준 16400 소수 화폐 (0) | 2023.02.09 |
백준 2206 벽 부수고 이동하기 (0) | 2023.01.12 |
백준 1707 이분 그래프 (0) | 2023.01.11 |
백준 16928 뱀과 사다리 게임 (0) | 2023.01.10 |