일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 미래는_현재와_과거로
- back propagation
- 회고록
- 가끔은 말로
- 너비 우선 탐색
- BFS
- tensorflow
- dfs
- pytorch
- DP
- 문자열
- object detection
- c++
- NEXT
- 크루스칼
- 플로이드 와샬
- 2023
- dropout
- Overfitting
- 조합론
- 우선 순위 큐
- 자바스크립트
- 세그먼트 트리
- lazy propagation
- 알고리즘
- 백트래킹
- 가끔은_말로
- 다익스트라
- 이분 탐색
- 분할 정복
Archives
- Today
- Total
Doby's Lab
[알고리즘] 백준 2023번: 신기한 소수 (C++), 음..? 신기한 문제네 본문
논리
입력으로 4가 주어지면 4자리 수 중에 예를 들어 7331이면 맨 앞자리부터 7, 73, 733, 7331처럼 모두 소수가 되어 만족하는 수들을 구하는 문제였다.
논리를 이렇게 짜두고 코드는 반대로 7331, 733, 73, 7 순서로 소수인지 판별했다.
하지만, 이는 시간 초과를 유발한다.
그래서 반대로 맨 앞자리부터 소수 판정을 하는 코드를 짰다.
왜냐하면 극단적으로 8자리 수가 주어졌을 때, 8자리 수가 소수인지 판정을 하고 7자리 수가 소수인지 판정하는 것보다는 1자리 수가 소수인지 판정하고 그다음으로 넘어가는 형식이 더 빠르기 때문이다.
그래서 다음과 같이 코드를 짰다.
(맨 처음의 수를 기억하고 있어야 하기 때문에 solution 함수에서 answer에 초기값을 넣어줬다.)
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int answer = 0;
int save = 0;
bool isPrime(int n) {
if (n == 1) {
return 0;
}
if (n == 2) {
return 1;
}
for (int i = 2; i < sqrt(n) + 1; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
void solution(int n, int cnt, int val) {
if (val != 0 && n / val == save) {
return;
}
if (cnt == 0) {
answer = n;
}
if (val == 0) {
cout << answer << '\n';
return;
}
if (isPrime(n / val) == true) {
val /= 10;
solution(n, cnt + 1, val);
}
else {
save = n / val;
return;
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
int val = pow(10, n - 1);
int val2 = pow(10, n);
for (int i = val; i < val2; i++) {
solution(i, 0, val);
}
return 0;
}
어라
이 포스팅을 하는 이유가 원래 isPrime에 n == 0일 때도 return 1을 하니까 정답이 되길래 포스팅을 쓰고 있던 건데 어쩌다가 시간 초과가 뜬 코드를 다시 제출했더니 맞다는 결과가 나왔다. (당황스럽네)
728x90
'PS > BOJ' 카테고리의 다른 글
[알고리즘] 백준 2417번: 정수 제곱근 (C++), 더 큰 정수 자료형 unsigned long long (0) | 2021.10.01 |
---|---|
[알고리즘] 백준 1838번: 버블 정렬 (C++), 더 논리적인 감각을 만들어내야 한다 (0) | 2021.10.01 |
[알고리즘] 백준 14889번: 스타트와 링크 (C++), 복합형 문제, 백트래킹의 pruning (0) | 2021.09.29 |
[자료구조] 백준 15829번: Hashing (C++), 해싱 개념, Mod 연산 (0) | 2021.09.28 |
[알고리즘] 백준 1018번: 체스판 다시 칠하기 (C++), while문의 조건 and, or (0) | 2021.09.25 |