๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 7863_Very Simple Problem

๋ฟŒ์•ผ._. 2025. 10. 1. 11:59
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/7863)

< Very Simple Problem >

 

๋ฌธ์ œ ํ’€์ด 

 

๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์ œ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ๋Š”๋‹ค.

1. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฌธ์ œ๋กœ ๋ณธ ์‹ฌ์‚ฌ์œ„์›์ด ์ „์ฒด์˜ ๊ณผ๋ฐ˜์ˆ˜๋ณด๋‹ค ๋งŽ์•„์•ผ ํ•œ๋‹ค.
2. ๊ทธ ๋ฌธ์ œ๋ฅผ ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ฌธ์ œ๋กœ ๋ณธ ์‹ฌ์‚ฌ์œ„์›์ด ์—†์–ด์•ผ ํ•œ๋‹ค.

 

 

my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class _7863_ { // Very Simple Problem

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

		int n = Integer.parseInt(st.nextToken());
		int p = Integer.parseInt(st.nextToken());

		HashMap<Integer, Integer> simple = new HashMap<>();
		Set<Integer> hard = new HashSet<>();

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

			int arr[] = new int[p];
			int min = 10001, max = 0;
			for (int j = 0; j < p; j++) {
				arr[j] = Integer.parseInt(st.nextToken());
				min = Math.min(min, arr[j]);
				max = Math.max(max, arr[j]);
			}

			for (int j = 0; j < p; j++) {
				if (arr[j] == min) {
					if (simple.containsKey(j + 1)) {
						simple.replace(j + 1, simple.get(j + 1) + 1);
					} else {
						simple.put(j + 1, 1);
					}
				}
				if (arr[j] == max) {
					hard.add(j + 1);
				}
			}
		}

		ArrayList<Integer> list = new ArrayList<>(simple.keySet());
		Collections.sort(list, new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				return simple.get(o2) - simple.get(o1);
			}
		});

		boolean flag = false;
		ArrayList<Integer> result= new ArrayList<>();
		for (int num : list) {
			if (simple.get(num) > n / 2 && !hard.contains(num)) {
				flag = true;
				result.add(num);
			}
		}
		
		if (!flag) {
			bw.write("0");
		}else {
			Collections.sort(result);
			for(int num : result) {
				bw.write(num+" ");
			}
		}
		bw.flush();
	}
}
๋ณ€์ˆ˜)
n, p : ์‹ฌ์‚ฌ์œ„์› ์ˆ˜, ๋ฌธ์ œ ์ˆ˜
simple : HashMap <๊ฐ€์žฅ ์‰ฌ์šด ๋ฌธ์ œ ๋ฒˆํ˜ธ, ๊ฐ€์žฅ ์‰ฌ์šด ๋ฌธ์ œ๋กœ ๋ณธ ์‹ฌ์‚ฌ์œ„์›์˜ ์ˆ˜>
hard : ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ฌธ์ œ ๋ฒˆํ˜ธ
arr : ๊ฐ ์‹ฌ์‚ฌ์œ„์›์˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ ์ˆ˜
min, max : ๊ฐ ์‹ฌ์‚ฌ์œ„์›์˜ ์ ์ˆ˜ ์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’
list : simple key -> ArrayList
flag : ์กฐ๊ฑด ๋งŒ์กฑ ์—ฌ๋ถ€
result : ์กฐ๊ฑด ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์ œ ๋ฒˆํ˜ธ

 

์‹ฌ์‚ฌ์œ„์› ์ˆ˜์™€ ๋ฌธ์ œ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์‹ฌ์‚ฌ์œ„์› ์ˆ˜๋งŒํผ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) ๊ฐ ๋ฌธ์ œ์— ํ•ด๋‹นํ•˜๋Š” ์ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด์„œ ์‹ฌ์‚ฌ์œ„์›์˜ ์ ์ˆ˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

2) ์ตœ์†Ÿ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ œ ๋ฒˆํ˜ธ๋ฅผ HashMap์— ์ €์žฅํ•˜๊ณ , ์ตœ๋Œ“๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ œ ๋ฒˆํ˜ธ๋ฅผ Set์— ์ €์žฅํ•œ๋‹ค.

 

HashMap์˜ key๊ฐ’์„ ArrayList๋กœ ๋ณ€ํ™˜ ํ›„ ๊ฐ€์žฅ ์‰ฌ์šด ๋ฌธ์ œ๋กœ ๋งŽ์ด ๋ณธ ๋ฌธ์ œ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ArrayList๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์‹ฌ์‚ฌ์œ„์› ๊ณผ๋ฐ˜์ˆ˜๋ณด๋‹ค ๋งŽ์ด ์‰ฌ์šด ๋ฌธ์ œ๋กœ ์ง€์ •๋˜๊ณ  ์–ด๋ ค์šด ๋ฌธ์ œ๋กœ ์ง€์ •๋œ ์  ์—†๋Š” ๋ฌธ์ œ ๋ฒˆํ˜ธ๋ฅผ result ArrayList์— ์ €์žฅํ•œ๋‹ค.

 

์ตœ์ข… ArrayList๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค. ์ด๋•Œ, ์กฐ๊ฑด์— ๋งž๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด "0"์„ ์ถœ๋ ฅํ•œ๋‹ค.