Plite
전자오락 공방
Plite
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 프로젝트 (18)
      • 완성 프로젝트 (3)
      • 프로젝트 진행 내역 (15)
    • 공부 및 정리 (241)
      • 백준 코드 (222)
      • C++ (8)
      • DirectX (2)
      • Unreal Engine (6)
      • 프로그래밍 패턴 (3)
    • 기타 (12)
      • 기타 주저리 (10)
    • 게임과 취미 (1)
    • 대문 (1)

블로그 메뉴

  • 홈
  • 프로젝트
  • 취미, 일상
  • 백준 프로필

공지사항

  • [Read Me]
  • 제 블로그에 방문하신 것을 환영합니다.

인기 글

태그

  • C++
  • 우선순위큐
  • 그래프
  • 기하
  • UC++
  • 정렬
  • 트라이
  • 정수론
  • 유니온 파인드
  • 큐
  • 세그먼트 트리
  • 분할정복
  • 백준
  • 백트래킹
  • 조합론
  • 스택
  • 동적계획법
  • 이분탐색
  • 브루트포스
  • 트리
  • 문자열
  • LCA
  • 최소 스패닝 트리
  • 투포인터
  • 누적합
  • 수학
  • SCC
  • KMP
  • 위상 정렬
  • 구현

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Plite
공부 및 정리/백준 코드

[C++]백준 - 1026번 문제

[C++]백준 - 1026번 문제
공부 및 정리/백준 코드

[C++]백준 - 1026번 문제

2021. 10. 23. 16:55

1026번: 보물 (acmicpc.net)

 

1026번: 보물

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

www.acmicpc.net

 

1026번 : 보물


옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.

길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.

 

S = A[0] × B[0] + ... + A[N-1] × B[N-1]

 

S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.

S의 최솟값을 출력하는 프로그램을 작성하시오.

 

입력


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

 

 

출력


첫째 줄에 S의 최솟값을 출력한다.

 

 

 


 

생각해 볼 점


문제에서는 B 배열을 재정렬 하지 말라고 써있었지만, 가장 쉽게 푸는 방법은

 

A 배열은 오름차순, B 배열은 내림차순으로 정렬하여 서로 곱해주는 방법입니다.

 

A : {1, 2, 3}

B : {4, 2, 1}

* :  4+4+3 = 11

다음과 같이 풀어서 제출하면 정답입니다.

 

 

만약, 문제의 조건대로 B를 그대로 두고 풀고 싶을 경우,

 

B의 index를 함께 정렬한 후, B의 index 번호에 맞추어 A의 배열을 재설정 하면 될 것입니다.

 

A : {2, 3, 1}

B : {1, 4, 2}

 

-> pair<int, int> B_clone[] = {<0,1>, <1, 4>, <2, 2>}

 

- 정렬

A : {1, 2, 3}

B_clone: {<1, 4>, <2, 2>, <0, 1>}

 

- 재배치

A : {3, 1, 2}

B : {1, 4, 2}

 

코드


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

int main() 
{
    int N;
    scanf("%d", &N);
    
    int *A = new int[N];
    int *B = new int[N];
    for(int i = 0; i < N; i++) scanf("%d", &A[i]);
    for(int i = 0; i < N; i++) scanf("%d", &B[i]);
    
    sort(A, A + N);
    sort(B, B + N, greater<int>());
    int result = 0;
    for(int i = 0; i < N; i++) result += A[i] * B[i];
    
    printf("%d", result);
    
    delete[] A;
    delete[] B;
	return 0;
}

 

그 외


 

저작자표시

'공부 및 정리 > 백준 코드' 카테고리의 다른 글

[C++]백준 - 20040번 문제  (0) 2021.10.24
[C++]백준 - 1100번 문제  (0) 2021.10.24
[C++]백준 - 11779번 문제  (0) 2021.10.23
[C++]백준 - 18111번 문제  (0) 2021.10.22
[C++]백준 - 17387번 문제  (0) 2021.10.22
  • 1026번 : 보물
  • 입력
  • 출력
  • 생각해 볼 점
  • 코드
  • 그 외
'공부 및 정리/백준 코드' 카테고리의 다른 글
  • [C++]백준 - 20040번 문제
  • [C++]백준 - 1100번 문제
  • [C++]백준 - 11779번 문제
  • [C++]백준 - 18111번 문제
Plite
Plite
개발 일지, 게임 이야기 등을 적어두는 공간입니다.

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.