※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 25943번 문제인 양팔저울이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/25943 

 

25943번: 양팔저울

입력은 표준입력을 사용한다. 첫 번째 줄에 자갈 개수를 나타내는 양의 정수 $n$ ($2 ≤ n ≤ 10\,000$)이 주어진다. 다음 줄에 $n$ 개의 수들이 주어지는데, 이들은 번호 순서대로 자갈의 무게이다. 자

www.acmicpc.net

먼저, 양팔저울에 주어진 추를 올리는 시뮬레이션을 구현하자. 이는 현재 왼쪽 접시에 올라간 자갈의 무게가 오른쪽 접시에 올라간 자갈의 무게와 같거나 그보다 더 가벼우면 왼쪽 접시에 다음 자갈을, 그렇지 않다면 오른쪽 접시에 다음 자갈을 추가해나가는 것으로 구현할 수 있다.

 

양팔저울에 자갈을 모두 올린 뒤에는 두 저울에 올라간 자갈의 무게의 차를 구한다. 그리고 해당 차만큼의 무게에 해당하는 추를 마련할 때 필요한 최소 갯수의 추를 구하면 문제를 해결할 수 있다.

 

100이상의 무게는 전부 100짜리 추로 대응시키고 10단위는 10, 20, 50으로, 1단위는 1, 2, 5단위로 대응시켜 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N;
int L = 0, R = 0;
int arr[10] = { 0,1,1,2,2,1,2,2,3,3 };

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	while (N--) {
		int x; cin >> x;
		if (L <= R) L += x;
		else R += x;
	}

	int ans = 0;
	int diff = abs(R - L);
	while (diff >= 100) ans++, diff -= 100;
	ans += arr[diff % 10]; diff /= 10;
	ans += arr[diff % 10];

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 13907 // C++] 세금  (0) 2023.03.17
[BOJ 25826 // C++] 2차원 배열 다중 업데이트 단일 합  (0) 2023.03.16
[BOJ 1071 // C++] 소트  (0) 2023.03.14
[BOJ 25936 // C++] Rain Gauge  (0) 2023.03.13
[BOJ 5602 // C++] 問題1  (0) 2023.03.13

+ Recent posts