๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 15465_Milk Measurement

๋ฟŒ์•ผ._. 2026. 3. 3. 12:15
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/15465)

< Milk Measurement >

 

๋ฌธ์ œ ํ’€์ด 

 

ArrayList์— ์†Œ ์ด๋ฆ„, ํ˜„์žฌ ์šฐ์œ  ์ƒ์‚ฐ๋Ÿ‰์„ ์ €์žฅํ•˜๋ฉฐ ์ƒ์‚ฐ๋Ÿ‰์ด ๋ณ€๊ฒฝ๋œ ๊ฐ ๋‚ ๋งˆ๋‹ค ์šฐ์œ  ์ƒ์‚ฐ๋Ÿ‰์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์‚ฌ์ง„ ๋ฐ”๋€ ์—ฌ๋ถ€๋ฅผ ๊ตฌํ•œ๋‹ค.

 

my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.StringTokenizer;

public class _15465_ { // Milk Measurement
	static class Cow {
		private String name;
		private int milk;
		private int day;

		public Cow(String name, int milk) {
			this.name = name;
			this.milk = milk;
		}

		public Cow(String name, int milk, int day) {
			this.name = name;
			this.milk = milk;
			this.day = day;
		}
	}

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		int n = Integer.parseInt(bf.readLine());

		ArrayList<Cow> list = new ArrayList<>();
		list.add(new Cow("Bessie", 7));
		list.add(new Cow("Elsie", 7));
		list.add(new Cow("Mildred", 7));

		ArrayList<Cow> cmd = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(bf.readLine());

			int day = Integer.parseInt(st.nextToken());
			String name = st.nextToken();
			int milk = Integer.parseInt(st.nextToken());

			cmd.add(new Cow(name, milk, day));
		}

		Collections.sort(cmd, new Comparator<Cow>() {
			@Override
			public int compare(Cow o1, Cow o2) {
				return o1.day - o2.day;
			}
		});

		int result = 0;
		HashSet<String> set = new HashSet<>();
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < 3; j++) {
				if (list.get(j).name.equals(cmd.get(i).name)) {
					list.get(j).milk += cmd.get(i).milk;
					break;
				}
			}
			Collections.sort(list, new Comparator<Cow>() {
				@Override
				public int compare(Cow o1, Cow o2) {
					return o2.milk - o1.milk;
				}
			});

			boolean flag = false;
			for (int j = 0; j < 3; j++) {
				if (list.get(j).milk == list.get(0).milk) {
					if (!set.contains(list.get(j).name)) {
						flag = true;
						set.add(list.get(j).name);
					}
				} else {
					if (set.contains(list.get(j).name)) {
						flag = true;
						set.remove(list.get(j).name);
					}
				}
			}
			if (flag) {
				result += 1;
			}
		}
		System.out.println(result);
	}
}
๋ณ€์ˆ˜)
n : ์ธก์ • ํšŸ์ˆ˜
list : ๊ฐ ์†Œ์— ๋Œ€ํ•ด ์šฐ์œ  ์ƒ์‚ฐ๋Ÿ‰
cmd : ์ธก์ • ๊ธฐ๋ก
day, name, milk : ๋‚ ์งœ, ์†Œ์˜ ์ด๋ฆ„, ์šฐ์œ  ์ƒ์‚ฐ๋Ÿ‰์˜ ๋ณ€ํ™”๋Ÿ‰
result : ๋ฒฝ์— ๊ฑธ์–ด๋‘” ์†Œ์˜ ์‚ฌ์ง„์„ ๋ฐ”๊ฟ”์•ผ ํ–ˆ๋˜ ๋‚ ์˜ ์ˆ˜ 

 

์ธก์ • ํšŸ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ArrayList์— ์ดˆ๊ธฐ ๊ฐ 3๋งˆ๋ฆฌ์˜ ์†Œ์— ๋Œ€ํ•ด ์ด๋ฆ„๊ณผ ์ดˆ๊ธฐ ์šฐ์œ  ์ƒ์‚ฐ๋Ÿ‰ 7์„ ์ €์žฅํ•œ๋‹ค. ์ธก์ • ํšŸ์ˆ˜๋งŒํผ ์ธก์ •๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•„ ์ƒˆ๋กœ์šด ArrayList์— ์ €์žฅํ•œ๋‹ค. ์ธก์ •๊ฐ’์„ ์ €์žฅํ•œ ArrayList๋ฅผ ๋‚ ์งœ ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ์ธก์ •๊ฐ’์„ ์‚ดํŽด๋ณด๋ฉฐ ์†Œ์˜ ์šฐ์œ  ์ƒ์‚ฐ๋Ÿ‰์„ ๋ณ€ํ™”์‹œํ‚จ๋‹ค. ์†Œ 3๋งˆ๋ฆฌ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ ArrayList๋ฅผ ์šฐ์œ  ์ƒ์‚ฐ๋Ÿ‰ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ ๋ฒฝ์— ๊ฑธ์–ด๋‘” ์†Œ์˜ ์‚ฌ์ง„์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š”์ง€ ํŒ๋ณ„ํ•œ๋‹ค. ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๋ฉด result๋ฅผ +1 ํ•œ๋‹ค.

 

์ตœ์ข… result๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 



 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 17550_Inquiry I  (0) 2026.03.04
[Baekjoon] 6119_Cow Line  (0) 2026.02.27
[Baekjoon] 21236_Comfortable Cows  (0) 2026.02.26
[Baekjoon] 11969_Breed Counting  (0) 2026.02.24
[Baekjoon] 3022_PRASE  (0) 2026.02.23