문제
두 개의 바구니에 사과와 오렌지가 있다. 첫 번째 바구니에는 사과 A개와 오렌지 B개가 있으며 두 번째 바구니에는 사과 C개와 오렌지 D개가 있다.
당신은 한 바구니에 있는 과일 하나를 집어서 다른 바구니로 옮길 수 있다. 이런 식으로 과일을 옮길 때, 한 바구니에는 사과만 있게 하고 다른 쪽에는 오렌지만 있게 하려고 한다.
앞서 말한 조건을 만족하도록 과일을 옮길 때, 과일을 옮기는 최소 횟수를 구하는 프로그램을 작성하여라.
입력
첫 번째 줄에는 첫 번째 바구니에 있는 사과와 오렌지의 수 A, B가 주어진다. (0 ≤ A, B ≤ 1,000)
두 번째 줄에는 두 번째 바구니에 있는 사과와 오렌지의 수 C, D가 주어진다. (0 ≤ C, D ≤ 1,000)
출력
사과와 오렌지를 옮기는 최소 횟수를 출력한다.
풀이 과정
한 바구니에는 사과만 있게 하고 다른 쪽에는 오렌지만 있게 하려면, 두 가지 방법 중에서 고를 수 있다.
(1) 첫 번째 바구니에 사과만 담고 두 번째 바구니에 오렌지만 담기
(2) 첫 번째 바구니에 오렌지만 담고 두 번째 바구니에 사과만 담기
과일을 옮기는 최소 횟수를 구해야 하기 때문에, 선택지마다 과일을 옮기는 횟수는 다음과 같다.
(1) 첫 번째 바구니가 가진 오렌지 개수 (B) + 두 번째 바구니가 가진 사과 개수 (C)
(2) 첫 번째 바구니가 가진 사과 개수 (A) + 두 번째 바구니가 가진 오렌지 개수 (D)
한 바구니가 특정 과일만 가질 수 있도록 나머지 과일을 옮겨주면 과일 옮기는 횟수가 된다.
최소 횟수를 구해야 하므로, B+C 와 A + D 중 최소 횟수를 출력해주면 된다.
C
#include <stdio.h>
int main(void) {
int a, b, c, d;
scanf("%d %d", &a, &b);
scanf("%d %d", &c, &d);
if (a + d > b + c) printf("%d", b + c);
else printf("%d", a + d);
return 0;
}
Python
a, b = map(int, input().split())
c, d = map(int, input().split())
print(min(a+d, b+c))
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 1486 : 등산 ( GOLD 2 ) / Python (0) | 2023.09.30 |
---|---|
[ BOJ ] 1152 : 단어의 개수 ( BRONZE 2 ) / Python (0) | 2023.09.30 |
[ BOJ ] 28295 : 체육은 코딩과목 입니다 ( BRONZE 4 ) / C, Python (0) | 2023.09.28 |
[ BOJ ] 2675 : 문자열 반복 ( BRONZE 2 ) / C, C++, Python, Java (0) | 2023.09.26 |
[ BOJ ] 10809 : 알파벳 찾기 ( BRONZE 2 ) / C, C++, Python, Java (0) | 2023.09.26 |