본문 바로가기

algorithm/Sorting, Binary Search

[C++] BOJ 1026 보물

문제

백준 1026번 보물 https://www.acmicpc.net/problem/1026

 

1026번: 보물

첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거

www.acmicpc.net

코드

#include<iostream>
#include<algorithm>
using namespace std;
int n, a[55], b[55];
int main() {
	cin >> n;
	for (int i = 0; i < n; i++)cin >> a[i];
	for (int i = 0; i < n; i++)cin >> b[i];
	sort(a, a + n);
	sort(b, b + n);
	int res = 0;
	for (int i = 0; i < n; i++)res += a[i] * b[n - 1 - i];
	cout << res;
}

풀이방법

a는 작은 순서대로, b는 큰 순서대로 서로 곱해주며 더한 값을 반환한다.

고민과정

그냥...딱봐도 큰애들끼리 곱하는걸 피해야할거같아서 각자 정렬하고 순서대로 곱해줬더니 맞았다 ! 사실 너무 직관에 의존하는 것 같아서 고민이다..

n 크기가 작길래 여차하면 55!만큼 그냥 브루트포스로 다 돌려버릴까 했는데 다행히 직관이 맞았다.

'algorithm > Sorting, Binary Search' 카테고리의 다른 글

[C++] BOJ 11656 접미사 배열  (0) 2022.01.12
[C++] BOJ 1920 수 찾기  (0) 2021.05.08
[C++] BOJ 10815 숫자 카드  (0) 2021.05.08
[C++] BOJ 11399 ATM  (0) 2021.05.08
[C++] BOJ 16401 과자 나눠주기  (0) 2021.05.08