1026번 보물 풀이
1026번 보물 풀이 시작합니다.
문제는 이러합니다.
이 문제의 정답 비율이 60%가 넘는다는 사실을 잊고 너무 어렵게 생각을 해서..시간을 낭비했습니다ㅠ
[힌트]
중요한건 어렵게 생각하지 않는것인것 같습니다. ㅎ
문제의 요지는 단순하게 A를 재배열하고, B를 재배열하면 안됩니다.
이 문제에서는 단순히 입력을 받는 B배열을 재배열하면 틀리게끔 해놓은것 같습니다.
그렇다면 정말 단순하지만 B의 배열에 있는 원소를 고대로! 다른 배열을 만들어 그 배열에 똑같이 넣어주고 정렬하면 되겠죠?
정렬은 A배열은 작은수 순서대로, B는 큰수 순서대로 정렬해주면 문제가 요구한 정답이 나오게됩니다.
네 그러면 됩니다. ㅎ
풀이 공개합니다.
[풀이 소스코드]
#include <stdio.h>
int main()
{
int input,i,j,tmp,total;
scanf("%d",&input);
int a[input],b[input],result[input],b2[input];
for(i = 0; i < input; i++)
{
scanf("%d",&a[i]);
}
for(i = 0; i < input-1; i++)
{
for(j = 0; j < input-1; j++)
{
if(a[j] > a[j+1])
{
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
for(i = 0; i <input; i++)
{
scanf("%d",&b[i]);
}
for(i = 0; i < input; i++) b2[i] = b[i];
for(i = 0; i < input-1; i++)
{
for(j = 0; j < input-1; j++)
{
if(b2[j] < b2[j+1])
{
tmp = b2[j];
b2[j] = b2[j+1];
b2[j+1] = tmp;
}
}
}
for(i = 0; i < input; i++)
{
result[i] = a[i] * b2[i];
total += result[i];
}
printf("%d",total);
return 0;
}
저는 코드를 최적화하는것보다 풀이하는데 집중했습니다. (코드가 긴거에 대한 변명)
이렇게 제출하게 되면..!
정답이라고 채점이 됩니다.
이상입니다.