본문 바로가기
코딩테스트 준비/백준

[백준/BOJ][C++] 1037번 약수

by 스테디코디스트 2023. 9. 4.
반응형

<문제 소개>


<소스 코드>

#include <iostream>
#include <vector>
using namespace std;

int main()
{
	// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N;
	cin >> N;

	int maxNum = 0;
	int minNum = 1000000;

	for (int i = 0; i < N; i++)
	{
		int x;
		cin >> x;

		maxNum = max(x, maxNum);
		minNum = min(x, minNum);
	}

	cout << maxNum * minNum;


	return 0;
}

<풀이과정>

1. 첫째줄에 N을 입력받고 둘째줄에 1과 N을 제외한 N의 약수들을 입력받는데, 약수들은 항상 짝이 있고, 짝끼리 곱하면 원래 숫자 N을 구할 수 있다.

2. 그러므로 입력받은 수들 중 가장 작은 수와 가장 큰 수는 항상 짝이 되고, 두 수를 곱해서 N을 구할 수 있다.

3. 따라서 코드상에서 먼저 N을 입력받고, maxNum과 minNum을 각각 정의해준다.

4. N만큼 반복하며 N의 약수들을 하나씩 입력받고, 입력받은 수와 현재 maxNum, minNum을 비교해 최댓값과 최솟값을 갱신해준다.

5. 모든 반복이 끝나면 해당 최대값과 최솟값을 곱해 N을 구해서 출력해준다.


<코멘트>

최댓값과 최솟값을 곱해서 원래 수를 구한다는 아이디어만 생각나면 쉬움!


<제출결과>