-- 예전 기록/BOJ

[ BOJ ] 11943 : 파일 옮기기 ( BRONZE 4 ) / C, Python

rejo 2023. 9. 28. 12:35

문제

두 개의 바구니에 사과와 오렌지가 있다. 첫 번째 바구니에는 사과 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))