티스토리 뷰

알고리즘/백준

[BAEKJOON]16769 Mixing Milk

응애~ 개발자 2024. 1. 10. 00:28
728x90
반응형

문제 요약

  • 알고리즘 분류:  구현, 시뮬레이션
  • 난이도: Bronze2
  • 문제내용:
    • 3개 컵이있고 각 컵에 우유가 들어 있다.
    • 옆 컵에 우유를 붓는다. 우유 부을 때 가득 찰 거 같으면 가득 찰 때까지만 부으면 된다.(맨 끝일 경우 맨 앞에 우유를 붓는다.)
    • 위 과정을 100번 한 후 각 컵에 우유량을 출력해라.
  • 사이트: https://www.acmicpc.net/problem/16769
 

16769번: Mixing Milk

The first line of the input file contains two space-separated integers: the capacity $c_1$ of the first bucket, and the amount of milk $m_1$ in the first bucket. Both $c_1$ and $m_1$ are positive and at most 1 billion, with $c_1 \geq m_1$. The second and t

www.acmicpc.net

문제풀이

 이번 문제는 간단한 1차원 배열 시뮬레이션을 구현 하는 문제이다. 이번 문제에서 아래 과정을 100번 반복 하면 된다.

1. 횟수를 n이라고 하면 n 번째  % 3, (n번째 + 1) % 3으로 각 컵의 위치를 나타 낸다.

2. 현재 컵을 옆에 컵에 더해준다.

3. 더하고 나서 옆에 컵 보다 클 경우 옆에 컵 크기 만큼 저장하고 현재 컵은 옆에 컵 뺀 것을 저장한다. 옆에 컵 보다 작을 경우 현재 컵을 0으로 저장한다.

 

Code

Python

'\n'.join(map(str, milks)): join은 리스트에 중간에 삽입하고 합한다음 문자열로 반환 한다. 즉 '\n'을 중간 삽입하면  리스트에 값을 각 줄로 출력 한다.

cups = []
milks = []

for _ in range(3):
    cup, milk = map(int, input().split())
    cups.append(cup)
    milks.append(milk)

count = 0
while count < 100:
    # 현재 컵, 옯길 컵 위치 계산
    now, next = count % 3, (count + 1) % 3
    milks[next] += milks[now]

    # 컵에 우유가 꽉 찼을 때
    if milks[next] > cups[next]:
        milks[now] = milks[next] - cups[next]
        milks[next] = cups[next]
    else:
        milks[now] = 0

    count += 1

print('\n'.join(map(str, milks)))

Java

Arrays.stream(milks).forEach(System.out::println);

 자바 8부터 제공하는 stream 구문이다.  System.out::println은 Sytem.out.println 메소드를 함축적으로 참조한것이다. 즉 각 배열의 값을 메소드에 대입해서 실행 한다고 보면 된다. 아래것을 줄인 표현이라고 보면된다.

Arrays.stream(milks).forEach(mlik -> System.out.println(milk));

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		int [] cups = new int[3];
		int [] milks = new int[3];

		for(int i = 0; i < 3; i++){
			st = new StringTokenizer(br.readLine());
			cups[i] = Integer.parseInt(st.nextToken());
			milks[i] = Integer.parseInt(st.nextToken());
		}

		int count = 0;
		int now, next;

		while(count < 100){
			now = count % 3; // 현재 컵
			next = (count + 1) % 3; // 옮길 컵
			milks[next] += milks[now];

			// 컵에 우유가 꽉 찼을 때
			if(milks[next] > cups[next]){
				milks[now] = milks[next] % cups[next];
				milks[next] = cups[next];
			}else {
				milks[now] = 0;
			}

			count++;
		}

		Arrays.stream(milks).forEach(System.out::println);

	}

}
728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함