01
27

https://www.acmicpc.net/problem/2910

 

2910๋ฒˆ: ๋นˆ๋„ ์ •๋ ฌ

์ฒซ์งธ ์ค„์— ๋ฉ”์‹œ์ง€์˜ ๊ธธ์ด N๊ณผ C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 1 ≤ C ≤ 1,000,000,000) ๋‘˜์งธ ์ค„์— ๋ฉ”์‹œ์ง€ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

 

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int c = sc.nextInt();
		Integer[] input = new Integer[n];
		int[] seq = new int[c+1];
		Map<Integer, Integer> m = new HashMap<>();

		int idx = 1;
		for (int i = 0; i < n; i++) {
			int tmp = sc.nextInt();
			input[i] = tmp;
			if (!m.containsKey(tmp)) {
				m.put(tmp, 1);
				seq[tmp] = idx++;
			} else {
				int val = m.get(tmp);
				m.put(tmp, val + 1);
			}
		}

		Arrays.sort(input, new Comparator<Integer>() {

			@Override
			public int compare(Integer o1, Integer o2) {
				if (m.get(o2) - m.get(o1) == 0) {
					return seq[o1] - seq[o2];
				} else {
					return m.get(o2) - m.get(o1);
				}
			}

		});

		StringBuilder sb = new StringBuilder();
		for (int i : input) {
			sb.append(i).append(" ");
		}
		System.out.println(sb);
	}
}

 


์˜ค๋‹ต๋…ธํŠธ(ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ )

์ฒซ๋ฒˆ์งธ ์‹œ๋„๋Š” Comparator ๋ฅผ ์ด์šฉํ•œ ์ •๋ ฌ์ด์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ๊นŒ ๋นˆ๋„๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ ์ž…๋ ฅ์ˆœ ์ •๋ ฌ์ด ์•„๋‹ˆ๋ผ ๋˜‘๊ฐ™์ด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋ผ์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์•˜๋‹ค. 
๋‘๋ฒˆ์งธ ์‹œ๋„๋Š” ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์„ ํ•˜๋‚˜ ํŒŒ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
->์ถœ๋ ฅ์€ ์ž˜ ๋˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ ๋ฐœ์ƒ
-> ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด 10์–ต๊นŒ์ง€ ์žˆ์Œ. -> ๋‹น์—ฐํžˆ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ 4byte * 10์–ต = 4๊ธฐ๊ฐ€
-> ์ด๊ฑฐ๋„ map์œผ๋กœ ๋ฌถ์–ด๋ณด์ž
 

 


์ •๋‹ต์ฝ”๋“œ

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int c = sc.nextInt();
		Integer[] input = new Integer[n];
		Map<Integer, Integer> m = new HashMap<>();
		Map<Integer, Integer> seq = new HashMap<>();

		int idx = 1;
		for (int i = 0; i < n; i++) {
			int tmp = sc.nextInt();
			input[i] = tmp;
			if (!m.containsKey(tmp)) {
				m.put(tmp, 1);
				seq.put(tmp, idx++);
			} else {
				int val = m.get(tmp);
				m.put(tmp, val + 1);
			}
		}
//		System.out.println(seq.toString());

		Arrays.sort(input, new Comparator<Integer>() {

			@Override
			public int compare(Integer o1, Integer o2) {
				if (m.get(o2) - m.get(o1) == 0) {
					return seq.get(o1) - seq.get(o2);
				} else {
					return m.get(o2) - m.get(o1);
				}
			}

		});

		StringBuilder sb = new StringBuilder();
		for (int i : input) {
			sb.append(i).append(" ");
		}
		System.out.println(sb);
	}
}

 

์ˆœ์„œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์„ map์œผ๋กœ ๋งŒ๋“œ๋‹ˆ๊นŒ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

๋ฌธ์ œ๋ฅผ ๋‹ค ํ’€๊ณ  ์•Œ๊ฒŒ ๋œ ๊ฑด๋ฐ LinkedHahMap์„ ์ด์šฉํ•˜๋ฉด key ๊ฐ’์ด ์ž…๋ ฅ ์ˆœ์„œ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ์ด๊ฑธ ์ด์šฉํ•ด ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค. ๋น„์Šทํ•œ ๋งฅ๋ฝ์œผ๋กœ TreeSet์„ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ฉด์„œ, ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ฐ’์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑธ ๊ทธ๋Œ€๋กœ List๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๋ฉด ์ค‘๋ณต์ด ์ œ๊ฑฐ๋˜๊ณ  ์ •๋ ฌ๋œ ์ƒํƒœ์˜ List๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT