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

    2021. 11. 12.

    by. JuneBee

    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
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€