๐Ÿ““ STUDY/FASTCAMPUS

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 12์ผ์ฐจ

JuneBee 2021. 11. 12. 21:11
728x90
๋ฐ˜์‘ํ˜•

์‹œ์ฒญ ๋‚ ์งœ : 11/12/2021
์‹œ์ฒญ ๊ฐ•์˜ : ๋‹ค์–‘ํ•œ ์ •๋ ฌ ์‘์šฉ๋ฒ• - ์‘์šฉ ํŽธ

https://junebee.tistory.com/18 ์— ์ด์–ด, ์ •๋ ฌ ์‘์šฉ๋ฌธ์ œ ๊ฐ•์˜๋ฅผ ๋“ค์—ˆ๋‹ค.

 

์ˆ˜์—ด ์ •๋ ฌ https://www.acmicpc.net/problem/1015
์นด๋“œ https://www.acmicpc.net/problem/11652
ํ™”์‚ดํ‘œ ๊ทธ๋ฆฌ๊ธฐ https://www.acmicpc.net/problem/15970

์œ„ ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•ด๋ดค๋‹ค. ํ™”์‚ดํ‘œ ๊ทธ๋ฆฌ๊ธฐ๋Š” ์‹œ๊ฐ„์ด ์—†์–ด์„œ ์•„์ง ํ’€์ง€ ๋ชปํ–ˆ๋‹ค. ํ›„์— ์‹œ๊ฐ„์ด ๋‚˜๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ์—…๋กœ๋“œํ•˜๊ฒ ๋‹ค.

์ˆ˜์—ด ์ •๋ ฌ

๋ฌธ์ œ ํ•ด์„

์ฃผ์–ด์ง„ ๋ฐฐ์—ด๊ณผ ํ•ด๋‹น ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค.

[Original Array]

index 0 1 2 3 4 5
element 5 4 1 3 5 7

 

์œ„ ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค,

[Sorted Array]

index 0 1 2 3 4 5
element 1 3 4 5 5 7

 

์ด์ œ, ์›๋ณธ ๋ฐฐ์—ด์˜ element๊ฐ€ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ๋ช‡ ๋ฒˆ์งธ์ธ์ง€ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์œ„์— ๋งค์นญ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ทธ๋ ค๋ณด์•˜๋‹ค. ์œ„ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ๋Š” 3 2 0 1 4 5๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

๋ฌธ์ œ ํ’€์ด

๋‚˜๋Š” ๋ฐฐ์—ด์„ ๋‘ ๊ฐœ ์ด์šฉํ•˜์—ฌ ์œ„ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. ์›๋ณธ ๋ฐฐ์—ด๊ณผ ์ •๋ ฌํ•  ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์œ„์—์„œ ๋‚ด๊ฐ€ ํ•ด์„ํ•œ ๊ณผ์ •์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์ง  ํ’€์ด๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜
1. ์›๋ณธ ๋ฐฐ์—ด๊ณผ ์ •๋ ฌํ•  ๋ฐฐ์—ด์— ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›์Œ
2. ์ •๋ ฌํ•  ๋ฐฐ์—ด์„ ์ •๋ ฌํ•จ
3. For loop๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์›๋ณธ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์ฐพ์€ ํ›„์— ์ •๋ ฌ๋œ index๋ฅผ ํ”„๋ฆฐํŠธํ•˜๊ณ  ๋‹ค์Œ ์›์†Œ๋ฅผ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์ฐพ์•„์„œ index๋ฅผ ํ”„๋ฆฐํŠธํ•œ๋‹ค.
4. 3๋ฒˆ์„ N๋ฒˆ๋งŒํผ ๋ฐ˜๋ณต

์ฃผ์˜์‚ฌํ•ญ
- ๋งŒ์•ฝ, ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ํ˜„์žฌ ์›์†Œ์™€ ๊ฐ™์€ ๊ฐ’์„ ์ฐพ์•˜๋‹ค๋ฉด, ๊ทธ ๊ฐ’์„ ์Œ์ˆ˜๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ์—ˆ๋‹ค - ๋งŒ์•ฝ, ๋ฐฐ์—ด์— ๊ฐ™์€ ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ๊ณ„์† ์•ž์— ์ •๋ ฌ๋œ ์›์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ
- ์›์†Œ๋ฅผ ์ฐพ์€ ํ›„์—๋Š” break ํ•ด์ค˜์•ผ ๋‹ค์Œ ์›์†Œ๋ฅผ ์ฐพ๋Š”๋‹ค.

๊ตฌํ˜„

1. ์ž…๋ ฅ

for(int i = 0 ; i < N ; i++) {
	int num = Integer.parseInt(st.nextToken());
	list[i] =compare[i] = num;
}
  • list : ์›๋ณธ ๋ฐฐ์—ด
  • compare : ์ •๋ ฌํ•  ๋ฐฐ์—ด

2. ์ •๋ ฌ

Arrays.sort(list);

3. ์›๋ณธ ๋ฐฐ์—ด์˜ ์ •๋ ฌ๋œ ์ธ๋ฑ์Šค ๊ฐ’ ์ฐพ๊ธฐ

 

for(int i = 0 ; i < N ; i++) { //์›๋ณธ ๋ฐฐ์—ด์„ ๋Œ๋ฆฐ๋‹ค
	for(int j =0 ; j<N ; j ++) { //์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ๋Œ๋ฆฐ๋‹ค
		if(compare[i]== list[j]) { //์›๋ณธ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์ฐพ์œผ๋ฉด
		bw.write(j+" ");//์ •๋ ฌ๋œ ์ธ๋ฑ์Šค๋ฅผ ํ”„๋ฆฐํŠธ
		list[j] = -20;//์Œ์ˆ˜๊ฐ’์„ ๋„ฃ์–ด์ฃผ์–ด์„œ ๊ฐ™์€ ์›์†Œ๊ฐ’์ด ์žˆ์„ ๋•Œ ์ค‘๋ณต๋œ ์ธ๋ฑ์Šค๋ฅผ ์ฃผ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
		break;//์ฐพ์€ ํ›„ ๋‹ค์Œ ์›์†Œ๋กœ 
	}
}

 

์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ

package com.fastcamp.sort;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

/**
 * @author June Park
 * @date 11/12/2021
 * ์ˆ˜์—ด ์ •๋ ฌ
 * input
 * line 1 - ๋ฐฐ์—ด์˜ ํฌ๊ธฐ N
 * line 2 - ๋ฐฐ์—ด์˜ ์›์†Œ
 * Problem 
 * ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋˜๋Š” ์ˆ˜์—ด์„ ์ฐพ๋Š”๋‹ค (์˜ค๋ฆ„์ฐจ์ˆœ, ascending) - print index not elements
 * */
public class BOJ_1015_์ˆ˜์—ด์ •๋ ฌ {

	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int N = Integer.parseInt(br.readLine());
		int[] compare = new int[N];
		int[] list = new int[N];
		StringTokenizer st = new StringTokenizer(br.readLine());
		br.close();
		for(int i = 0 ; i < N ; i++) {
			int num = Integer.parseInt(st.nextToken());
			list[i] =compare[i] = num;
		}
		//sort list array and keep the input array as unsorted
		Arrays.sort(list);

		for(int i = 0 ; i < N ; i++) {
			for(int j =0 ; j<N ; j ++) {
				if(compare[i]== list[j]) { //if you find original element in sorted array 
					bw.write(j+" ");  //print out the index from sorted array
					list[j] = -20;  //put negative number to sorted array to avoid searching for same index when there is same number	
					break;  //escape from the for loop and search for next element
				}
			}
		}//end of for
		bw.flush();
		bw.close();
	
	}
}

์นด๋“œ

๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๋•Œ๋ฌธ์— ์ •๋ง ๋งŽ์€ ํ’€์ด๋ฅผ ์‹œ๋„ํ•ด๋ณด์•˜๋‹ค.

๋ฆฌ์ŠคํŠธ๋„ ์จ๋ณด๊ณ , ๋ฐฐ์—ด๋„ ์จ๋ณด๊ณ  ํŠธ๋ฆฌ ๋งต๋„ ์จ๋ณด์•˜๋Š”๋ฐ ํ•ด์‰ฌ ๋งต์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๊ฐ€ ๊ฐ€์žฅ ์งง๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ๋ถ€๋ถ„์ด ์—†์—ˆ๋‹ค. 

๋ฌธ์ œ ํ•ด์„

Mode๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

HashMap

HashMap ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ˆซ์ž๋ฅผ key๋กœ ์ €์žฅํ•˜๊ณ  value์— ์ˆซ์ž๊ฐ€ ์‚ฌ์šฉ๋œ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค.

์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ, ๋งŒ์•ฝ ์ด๋ฏธ ์ด์ „์— ์ˆซ์ž๊ฐ€ ๋‚˜์™”๋‹ค๋ฉด value์— ์ด์ „ ๊ฐ’์— 1์„ ๋”ํ•ด์ฃผ๋ฉด count ํ•  ์ˆ˜ ์žˆ๋‹ค.

Map<Long,Integer> numbers = new HashMap<>(); //๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด Map ์‚ฌ์šฉ
for(int n = 0 ; n< N ; n++) {
	long num = Long.parseLong(br.readLine());
	if(numbers.containsKey(num)) {
		numbers.put(num, numbers.get(num)+1);//override
	}
	else {numbers.put(num, 1);}
}

๋งŒ์•ฝ ํ•ด์‰ฌ ๋งต์— ํ˜„์žฌ ๋ฐ›์€ ์ˆซ์ž๊ฐ€ ์—†๋‹ค๋ฉด value์— 1์„ ์ค€๋‹ค(count ๊ฐ’์ด๋ฏ€๋กœ)

 

[์ฃผ์˜] ์ˆซ์ž๋Š” intํ˜•์ด ์•„๋‹Œ long ๊ฐ’์œผ๋กœ ๋ฐ›์•„์•ผ ํ•œ๋‹ค! ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ(Number format)์˜ ์ฃผ์š” ๋ฒ”์ธ์ด๋‹ค.. N (1 ≤ N ≤ 100,000)์œผ๋กœ ์ฃผ์–ด ์ € ์žˆ๊ธฐ ๋•Œ๋ฌธ์— long์œผ๋กœ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

 

HashMap ์ •๋ ฌ

1. ์„ ์–ธ

HashMap์„ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด ์˜จ๊ฐ– ๊ตฌ๊ธ€์„ ๋’ค ์ € ๋ณด์•˜๋‹ค. ์ •๋ฆฌํ•˜์ž๋ฉด, HashMap์„ ์ •๋ ฌํ•˜๋ ค๋ฉด ๋จผ์ €

HashMap<์ž๋ฃŒ๊ตฌ์กฐ,์ž๋ฃŒ๊ตฌ์กฐ> map = new HashMap<์ž๋ฃŒ๊ตฌ์กฐ, ์ž๋ฃŒ๊ตฌ์กฐ>();

์ด ์•„๋‹Œ

Map<์ž๋ฃŒ๊ตฌ์กฐ,์ž๋ฃŒ๊ตฌ์กฐ> map = new HashMap<์ž๋ฃŒ๊ตฌ์กฐ, ์ž๋ฃŒ๊ตฌ์กฐ>();

 

์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค

์ด์œ ๋Š”, ํ•ด์‰ฌ ๋งต์„ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!

 

2. ๋ฆฌ์ŠคํŠธ๋กœ ์ „ํ™˜

ํ•ด์‰ฌ๋งต์„ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ EntrySet์„ ์‚ฌ์šฉํ•œ๋‹ค. 

๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ํ•ด์‰ฌ ๋งต์˜ key์™€ value๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

List<Map.Entry<Long,Integer>>entry = new LinkedList<>(numbers.entrySet());

3. ์ •๋ ฌ

entry.sort(new Comparator< Map.Entry<Long, Integer>>(){
	@Override
	public int compare(Entry<Long, Integer> o1, Entry<Long, Integer> o2) {
		if(o1.getValue().intValue()==o2.getValue().intValue()) return Long.compare(o1.getKey().longValue(), o2.getKey().longValue());
		return o2.getValue()-o1.getValue();
	}
});

์ •๋ ฌ์€ Comparator์„ ์‚ฌ์šฉํ–ˆ๋‹ค. count๊ฐ’(value)์ด ๋งŽ์ด ์‚ฌ์šฉ๋œ ํ‚ค๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋˜, ํ•œ์ฐธ์„ ํ—ค๋งค๋‹ค๊ฐ€ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ๋ดค๋Š”๋ฐ, if ์กฐ๊ฑด์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด ํ‹€๋ฆฐ๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์‹œํ—˜ํ•ด๋ดค์„ ๋•Œ๋Š” if๋ฌธ์ด ์žˆ์œผ๋‚˜ ์—†์œผ๋‚˜ ๊ฒฐ๊ณผ๊ฐ€ ์•Œ๋งž๊ฒŒ ๋‚˜์™€์„œ ์ƒ๊ฐ์„ ์•ˆ ํ–ˆ๋Š”๋ฐ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๋•Œ๋ฅผ ๋ฐ˜๋ก€๋กœ ์ค˜๋ณด๋ฉด, 

4
-5
-5
-2
-2

์œ„ ํ…Œ์ŠคํŠธ ๊ฒฝ์šฐ, -5๊ฐ€ -2๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— -5๊ฐ€ ๋‚˜์™€์•ผ ํ•˜์ง€๋งŒ if ๋ฌธ์ด ์—†๋‹ค๋ฉด -2๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ,

entry.get(0).getKey()

์œผ๋กœ count ๊ฐ€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ entry๋ฆฌ์ŠคํŠธ์˜ 0๋ฒˆ์งธ ์›์†Œ์˜ ํ‚ค๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ฉด ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋œ ์ˆซ์ž๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ

package com.fastcamp.sort;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class BOJ_11652_์นด๋“œ {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int N = Integer.parseInt(br.readLine());
		Map<Long,Integer> numbers = new HashMap<>(); //๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด Map ์‚ฌ์šฉ

		for(int n = 0 ; n< N ; n++) {
			long num = Long.parseLong(br.readLine());
			if(numbers.containsKey(num)) {
				numbers.put(num, numbers.get(num)+1);//override
			}
			else {numbers.put(num, 1);}
		}
		br.close();
		//sort
		//๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์˜ด
		List<Map.Entry<Long,Integer>>entry = new LinkedList<>(numbers.entrySet());
		
		//sort
		entry.sort(new Comparator< Map.Entry<Long, Integer>>(){
			@Override
			public int compare(Entry<Long, Integer> o1, Entry<Long, Integer> o2) {
				if(o1.getValue().intValue()==o2.getValue().intValue()) //๊ฐ™์„ ๋•Œ
					return Long.compare(o1.getKey().longValue(), o2.getKey().longValue());
				
				return o2.getValue()-o1.getValue();
			}
			
		});
		System.out.println(entry.get(0).getKey());
	}

	}

 


ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ๋ฐ”๋กœ๊ฐ€๊ธฐ๐Ÿ‘‰ https://bit.ly/3FVdhDa

 

์ˆ˜๊ฐ•๋ฃŒ 100% ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ | ํŒจ์ŠคํŠธ์บ ํผ์Šค

๋”ฑ 5์ผ๊ฐ„ ์ง„ํ–‰๋˜๋Š” ํ™˜๊ธ‰์ฑŒ๋ฆฐ์ง€๋กœ ์ˆ˜๊ฐ•๋ฃŒ 100% ํ™˜๊ธ‰๋ฐ›์œผ์„ธ์š”! ๋” ๋Šฆ๊ธฐ์ „์— ์ž๊ธฐ๊ณ„๋ฐœ ๋ง‰์ฐจ ํƒ‘์Šน!

fastcampus.co.kr

๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ์ฐธ์—ฌ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•