본문 바로가기

Algorithm/Math

(C++) - 백준(BOJ) 8658 : Liczba

반응형

 

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

 

8658번: Liczba

Mamy daną liczbę całkowitą n, dla której chcemy znaleźć dwie wartości: najmniejszą oraz największą liczbę całkowitą, z przedziału od 1 do n, które nie są dzielnikami liczby n.

www.acmicpc.net

수학 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

3이상 정수 n, 정답을 출력할 변수 minN, maxN을 선언한 후 n을 입력해줍니다.

📔 풀이과정

10억까지 O(n)으로 탐색한다면 10초로 시간초과가 뜨게 됩니다. 따라서 하나라도 나누어 떨어지지 않는 수를 찾았다면break 해주는 식으로 답을 구합니다. 오름차순으로 for loop를 수행하며 minN을 구하며 내림차순으로 loop를 수행해 maxN을 구해줍니다.

📔 정답출력

minN과 maxN을 출력합니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
int n, minN, maxN;
int main(){
    cin >> n;
    for(int i = 2; i <= n; i++) {
        if(n % i) { minN = i; break; }
    }
    for(int i = n - 1; i >= 2; i--) {
        if(n % i) { maxN = i; break; }
    }
    cout << minN << ' ' << maxN;
}