[Silver IV] 보물 - 1026
https://www.acmicpc.net/problem/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의 최솟값을 출력한다.
예제입력 / 예제출력

문제이해 및 코드정리
s가 최소값을 구하는 문제이다.
주의할 점이 있다면 A의 배열은 바꿀수 있지만, B의 배열은 바꿀 수 없다고 명시된점이다.
최소값을 만드는 법은 A에서는 가장작은 값을 뽑고, B에서는 가장 큰 값을 뽑아 각각 계산을 진행하는 법이다.
코드로는 A배열은 sort 함수를 사용하여 정렬을 시켜줬고, B배열에서는 가장 큰값을 구하는 max, max의 위치를 알수있는 index함수 B배열에서 해당값을 빼줄 pop함수를 사용하여 A배열과 계산을 진행해주었다.
코드
import sys
N = int(sys.stdin.readline())
A = list(map(int,sys.stdin.readline().split()))
B = list(map(int,sys.stdin.readline().split()))
ans = 0
A.sort()
# A의 가장 작은값을 B의 가장 큰값과 곱해주는것이 가장 최소의 값을 만듬
for i in range(N):
ans += A[i] * B.pop(B.index(max(B)))
print(ans)
'알고리즘 문제풀이' 카테고리의 다른 글
백준 - 큐 10845(Python) (0) | 2023.02.27 |
---|---|
백준 - 스택 10828(Python) (0) | 2023.02.27 |
백준 - 국영수 10825 (Python) (0) | 2023.02.27 |
백준 - 차이를 최대로 10819(Python) (0) | 2023.02.26 |
백준 - 제로 10773 (Python) (0) | 2023.02.26 |
[Silver IV] 보물 - 1026
https://www.acmicpc.net/problem/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의 최솟값을 출력한다.
예제입력 / 예제출력

문제이해 및 코드정리
s가 최소값을 구하는 문제이다.
주의할 점이 있다면 A의 배열은 바꿀수 있지만, B의 배열은 바꿀 수 없다고 명시된점이다.
최소값을 만드는 법은 A에서는 가장작은 값을 뽑고, B에서는 가장 큰 값을 뽑아 각각 계산을 진행하는 법이다.
코드로는 A배열은 sort 함수를 사용하여 정렬을 시켜줬고, B배열에서는 가장 큰값을 구하는 max, max의 위치를 알수있는 index함수 B배열에서 해당값을 빼줄 pop함수를 사용하여 A배열과 계산을 진행해주었다.
코드
import sys
N = int(sys.stdin.readline())
A = list(map(int,sys.stdin.readline().split()))
B = list(map(int,sys.stdin.readline().split()))
ans = 0
A.sort()
# A의 가장 작은값을 B의 가장 큰값과 곱해주는것이 가장 최소의 값을 만듬
for i in range(N):
ans += A[i] * B.pop(B.index(max(B)))
print(ans)
'알고리즘 문제풀이' 카테고리의 다른 글
백준 - 큐 10845(Python) (0) | 2023.02.27 |
---|---|
백준 - 스택 10828(Python) (0) | 2023.02.27 |
백준 - 국영수 10825 (Python) (0) | 2023.02.27 |
백준 - 차이를 최대로 10819(Python) (0) | 2023.02.26 |
백준 - 제로 10773 (Python) (0) | 2023.02.26 |