DINGA DINGA
Published 2021. 3. 12. 01:25
[백준] 1037번: 약수 C & C++/BOJ
728x90

www.acmicpc.net/problem/1037

 

1037번: 약수

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되

www.acmicpc.net

 

코드

#include <stdio.h>

main() {
	int num, tmp, div[50];	//num: 진짜 약수의 개수, tmp: 버블소트용 변수, div: 진짜 약수를 저장하는 배열
	scanf("%d", &num);
	for (int i = 0; i < num; i++)	//div에 진짜 약수 저장
		scanf("%d", &div[i]);
	for (int i = 0; i < num; i++)	//버블소트로 오름차순 정렬
		for (int j = 0; j < num - i - 1; j++)
			if (div[j] > div[j + 1]) {
				tmp = div[j];
				div[j] = div[j + 1];
				div[j + 1] = tmp;
			}
	printf("%d", div[0] * div[num - 1]);
}

 

설명

 

우선 num을 입력받고, div배열에 진짜 약수를 저장한다.

버블소트(두 개의 인접한 인덱스를 비교하여 더 큰 숫자를 뒤로 보내어 정렬)를 이용해 div배열 내의 진짜 약수를 오름차순으로 정렬한다. 어떤 숫자 n의 약수를 오름차순으로 정렬했을 때 맨 처음 약수와 맨 끝의 약수를 곱하면 n이 되는 것을 이용해, div[0]과 div[num-1]을 곱해 출력한다.

728x90

'C & C++ > BOJ' 카테고리의 다른 글

[백준] 1712번: 손익분기점  (0) 2021.03.12
[백준] 5597번: 과제 안 내신 분..?  (0) 2021.03.12
[백준] 3046번: R2  (0) 2021.03.12
[백준] 2798번: 블랙잭  (0) 2021.03.11
[백준] 10809번: 알파벳 찾기  (0) 2021.03.04