https://www.acmicpc.net/problem/1037
코드 (C)
#include <stdio.h>
#include <stdlib.h>
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int n, result;
scanf("%d", &n);
int* ptr = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) scanf("%d", &ptr[i]);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - 1; j++)
{
if (ptr[j] > ptr[j + 1])
swap(&ptr[j], &ptr[j + 1]);
}
}
if (n % 2 == 0) result = ptr[0] * ptr[n - 1];
else result = ptr[n / 2] * ptr[n / 2];
printf("%d", result);
free(ptr);
return 0;
}
코드 (C++)
#include <iostream>
using namespace std;
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int number,result;
cin >> number;
int* ptr = new int[number];
for (int i = 0; i < number; i++) cin >> ptr[i];
for (int i = 0; i < number; i++)
{
for (int j = 0; j < number - 1; j++) if (ptr[j] > ptr[j + 1]) swap(&ptr[j], &ptr[j + 1]);
}
if (number % 2 == 0) result = ptr[0] * ptr[number - 1];
else result = ptr[number / 2] * ptr[number / 2];
cout << result;
delete[] ptr;
return 0;
}
코드 설명
입력받은 약수의 개수를 이용해 약수를 저장할 동적배열을 생성한다.
반복문을 돌면서 약수를 입력받고, 그 후 버블정렬로 배열을 정렬한다.
만약 약수의 개수가 짝수라면 정렬된 배열의 양끝 값을 곱한 값이 결과가 된다.
만약 약수의 개수가 홀수라면 가운데에 있는 값을 제곱한 값이 결과가 된다.
경우에 따라 계산된 결과를 출력하고 동적배열을 해제한다.
느낀 점
문제를 복잡하게 푼 것 같다. 버블정렬로 약수들을 점점 커지는 순으로 배열한 후 약수들이 짝수인 경우와 홀수인 경우를 나눠 풀었는데, 굳이 그럴 필요가 없었다. 그냥 반복문을 돌면서 최솟값과 최댓값을 구하고 그 둘을 곱해주면 더욱 짧게 코드를 작성할 수 있었을 것이다.
'PS (C, C++)' 카테고리의 다른 글
[백준/C & C++] 1929 소수 구하기 (0) | 2022.08.26 |
---|---|
[백준/C & C++] 1978 소수 찾기 (0) | 2022.08.26 |
[백준/C & C++] 1330 두 수 비교하기 (0) | 2022.08.26 |
[백준/C & C++] 1712 손익분기점 (0) | 2022.08.26 |
[백준/C & C++] 1773 폭죽쇼 (0) | 2022.08.26 |