※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 2986번 문제인 파스칼이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/2986 

 

2986번: 파스칼

첫째 줄에 창영이가 입력한 N이 주어진다. N은 1보다 크거나 같고, 10^9보다 작거나 같은 자연수이다.

www.acmicpc.net

주어진 프로그램은 N-1의 값을 N의 약수가 될 때까지 1씩 줄여나가는 프로그램이다. 즉, N의 자기 자신이 아닌 가장 큰 약수가 될 때까지 N-1의 값을 1씩 줄여나가는 프로그램이다. 단, 1의 경우 반복문을 한 바퀴도 돌지 못하므로 답은 0이 된다.

 

N의 자기 자신이 아닌 가장 큰 약수를 찾아 문제를 해결하자. N이 소수이면 찾고자 하는 약수는 1이 될 것이다. 그렇지 않은 경우 N을 해당 약수로 나눈 수는 N의 제곱근 이하임을 이용해 1이 아닌 가장 작은 약수를 반복문으로 찾는 것으로 문제를 충분히 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N;
int ans;
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	ans = N - 1;

	for (int i = 2; i * i <= N; i++) {
		if (N % i) continue;
		ans = N - N / i;
		break;
	}

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 24789 // C++] Railroad  (0) 2024.02.20
[BOJ 13268 // C++] 셔틀런  (1) 2024.02.19
[BOJ 17619 // C++] 개구리 점프  (0) 2024.02.17
[BOJ 18115 // C++] 카드 놓기  (2) 2024.02.16
[BOJ 29543 // C++] Smooth numbers  (0) 2024.02.15

+ Recent posts