์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[ ๋ฐฑ์ค€ / BOJ 5766 ] ํ• ์•„๋ฒ„์ง€๋Š” ์œ ๋ช…ํ•ด!

KIMHYEYUN 2021. 10. 1. 00:06
๋ฐ˜์‘ํ˜•

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

 

5766๋ฒˆ: ํ• ์•„๋ฒ„์ง€๋Š” ์œ ๋ช…ํ•ด!

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค,  ๋‹น์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์€ ํ•œ ํ–‰์— 2๋“ฑ์ธ ์„ ์ˆ˜(๋“ค)์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 2๋“ฑ์ธ ์„ ์ˆ˜๊ฐ€ ๋‘ ๋ช… ์ด์ƒ์ธ ๊ฒฝ์šฐ(๋™์ ์ž ๋ฐœ์ƒ), ๊ฐ ์„ ์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ

www.acmicpc.net

 

๋ฌธ์ œ


"๊ทธ ๋‰ด์Šค" ๋ฅผ ๋ณด๊ณ  ์˜จ ๊ฐ€์กฑ์ด ๋“ค๋–ด์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘๋“ค ํ• ์•„๋ฒ„์ง€๊ป˜์„œ ์ˆ˜ ์‹ญ๋…„๊ฐ„ ๊ต‰์žฅํžˆ ์‹ค๋ ฅ์žˆ๋Š”  ๋ธŒ๋ฆฟ์ง€(์นด๋“œ๊ฒŒ์ž„์˜ ์ผ์ข…) ์„ ์ˆ˜์˜€๋‹ค๋Š” ๊ฒƒ์€ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ํ• ์•„๋ฒ„์ง€๊ฐ€ ์—ญ๋Œ€ ์ตœ๊ณ ์˜ bridge ์„ ์ˆ˜๋กœ์„œ ๊ธฐ๋„ค์Šค๋ถ์— ์˜ค๋ฅธ๋‹ค๋Š” ์†Œ์‹์€ ์ •๋ง์ด์ง€ ๋†€๋ผ์› ์ฃ !

IBA(๊ตญ์ œ ๋ธŒ๋ฆฟ์ง€ ํ˜‘ํšŒ)๋Š” ์ˆ˜ ๋…„๊ฐ„, ๋งค์ฃผ ๊ฐ€์žฅ ์‹ค๋ ฅ์žˆ๋Š” ์„ ์ˆ˜๋“ค์˜ ๋žญํ‚น ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•ด์™”์Šต๋‹ˆ๋‹ค.  ๋งค์ฃผ ๋žญํ‚น์— ์„ ์ˆ˜์˜ ์ด๋ฆ„์ด ์˜ค๋ฅผ ๋•Œ๋งˆ๋‹ค ์„ ์ˆ˜์˜ ํฌ์ธํŠธ๊ฐ€ 1ํฌ์ธํŠธ์”ฉ ์˜ค๋ฅด๋Š”๋ฐ, ํ• ์•„๋ฒ„์ง€๊ป˜์„œ ๊ฐ€์žฅ ๋งŽ์€ ํฌ์ธํŠธ๋ฅผ ์–ป์–ด์„œ ์ตœ๊ณ ์˜ ๋ธŒ๋ฆฟ์ง€ ์„ ์ˆ˜๋กœ ์„ ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ• ์•„๋ฒ„์ง€๊ป˜๋Š” ๊ทธ์™€ ๋ธŒ๋ฆฟ์ง€ ์ˆœ์œ„๋ฅผ ๊ฒฝ์Ÿํ•˜๋Š” ์นœ๊ตฌ๋“ค์ด ๋งŽ์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ• ์•„๋ฒ„์ง€๋Š” ์–ด๋–ค ์„ ์ˆ˜(๋“ค)๊ฐ€ 2๋“ฑ์„ ํ–ˆ๋Š”์ง€ ์ •๋ง ๊ถ๊ธˆํ•˜์…จ์Šต๋‹ˆ๋‹ค.  

IBA ๋žญํ‚น ์ •๋ณด๋Š” ์ด์ œ ์˜จ๋ผ์ธ์— ์˜ฌ๋ผ์™€ ์žˆ๊ณ , ํ• ์•„๋ฒ„์ง€๊ป˜์„œ ๋‹น์‹ ์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋งค์ฃผ๋งˆ๋‹ค์˜ ๋žญํ‚น ์ •๋ณด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ธํ’‹์œผ๋กœ ๋ฐ›์•„ 2๋“ฑ ์„ ์ˆ˜๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์งœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ


๊ฐ ์„ ์ˆ˜๋Š” 1~10000๊นŒ์ง€์˜ ์ •์ˆ˜(์„ ์ˆ˜ ๋ฒˆํ˜ธ)๋กœ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค. ์ธํ’‹์€ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋“ค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ ํ–‰์—๋Š” ๋‘ ์ •์ˆ˜ N๊ณผ M์ด ์ฃผ์–ด์ง€๋Š”๋ฐ, ๋‹ค์Œ ํ–‰๋ถ€ํ„ฐ N(2<=N<=500)์ฃผ ๋™์•ˆ์˜ ๋งค์ฃผ ์ƒ์œ„ M(2<=M<=500)๋ช…์˜ ๋žญํ‚น ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ Nํ–‰์˜ ์ธํ’‹์ด ์ฃผ์–ด์ง€๋Š”๋ฐ ๊ฐ ํ–‰์€ ํ•œ ์ฃผ์˜ ๋žญํ‚น ์ •๋ณด์ž…๋‹ˆ๋‹ค. ๊ฐ ํ–‰์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜๋Š” M๊ฐœ์˜ ์ •์ˆ˜๋“ค์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.  

  • ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—๋Š” ์ตœ๊ณ ์ ์˜ ์„ ์ˆ˜๊ฐ€ ๋‹จ ํ•œ ๋ช…๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋งค์ฃผ๋งˆ๋‹ค์˜ ๋žญํ‚น ์ •๋ณด์—๋Š” ์„œ๋กœ ๋‹ค๋ฅธ M๊ฐœ์˜ ์„ ์ˆ˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

N๊ณผ M์ด ๋ชจ๋‘ 0์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ํ–‰์ด ์ธํ’‹์˜ ๋งˆ์ง€๋ง‰์ž…๋‹ˆ๋‹ค.

์ถœ๋ ฅ


๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค,  ๋‹น์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์€ ํ•œ ํ–‰์— 2๋“ฑ์ธ ์„ ์ˆ˜(๋“ค)์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 2๋“ฑ์ธ ์„ ์ˆ˜๊ฐ€ ๋‘ ๋ช… ์ด์ƒ์ธ ๊ฒฝ์šฐ(๋™์ ์ž ๋ฐœ์ƒ), ๊ฐ ์„ ์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ’€์ด


์ฒ˜์Œ์— ๋ฐฐ์—ด๋กœํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ,,,,,  Map์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ....... ๐Ÿคท‍โ™€๏ธ ์‹œ๊ฐ„์ดˆ๊ณผโ€ผ๏ธโ€ผ๏ธโ€ผ๏ธ

 

๊ทธ๋ž˜์„œ ๊ฐ์ฒด ๋ฐฐ์—ด๋กœ ํ•ด๋ณด๋‹ˆ... ์ •๋‹ตโ€ผ๏ธ๐Ÿคฆ‍โ™€๏ธ

 

์ฝ”๋“œ


Map์œผ๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
import java.util.TreeMap;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stringTokenizer;
        StringBuilder sb = new StringBuilder();

        int N, M;
        while(true){
            TreeMap<Integer, Integer> player = new TreeMap<>();
            stringTokenizer = new StringTokenizer(br.readLine());
            N = Integer.parseInt(stringTokenizer.nextToken());
            M = Integer.parseInt(stringTokenizer.nextToken());

            if(N == 0 && M == 0)
                break;

            for(int i = 0 ; i < N ; i++){
                stringTokenizer = new StringTokenizer(br.readLine());
                for(int j = 0 ; j < M ; j++){
                    int playerNum = Integer.parseInt(stringTokenizer.nextToken());
                    player.put(playerNum, player.getOrDefault(playerNum, 0)+1);
                }
            }
            
            List<Integer> listKeySet = new ArrayList<>(player.keySet());
            Collections.sort(listKeySet, (value1, value2) -> (player.get(value2).compareTo(player.get(value1))));

            int secondPlayer = player.get(listKeySet.get(1));
            sb.append(listKeySet.get(1)).append(" ");
            for(int i = 2 ; i < listKeySet.size() ; i++){
                if(secondPlayer == player.get(listKeySet.get(i)))
                    sb.append(listKeySet.get(i)).append(" ");
                else{
                    sb.append('\n');
                    break;
                }
            }
        }
        System.out.println(sb);
    }
}

๊ฐ์ฒด ๋ฐฐ์—ด๋กœ ๋งž์€ ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
import java.util.TreeMap;

public class Main_BOJ_5766_ํ• ์•„๋ฒ„์ง€๋Š”์œ ๋ช…ํ•ด {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stringTokenizer;
        StringBuilder sb = new StringBuilder();

        while(true){
            stringTokenizer = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(stringTokenizer.nextToken());
            int M = Integer.parseInt(stringTokenizer.nextToken());

            if(N == 0 && M == 0)
                break;

            player players[] = new player[10001];
            for(int i = 0 ; i < 10001 ; i++){
                players[i] = new player(i, 0);
            }

            for(int i = 0 ; i < N ; i++){
                stringTokenizer = new StringTokenizer(br.readLine());
                for(int j= 0 ; j < M ; j++){
                    int playerNum = Integer.parseInt(stringTokenizer.nextToken());
                    players[playerNum].score++;
                }
            }

            Arrays.sort(players);

            int second = players[1].score;
            for(int i = 1; i < 10001 ; i++){
                if(players[i].score == second){
                    sb.append(players[i].num).append(" ");
                }
            }
          sb.append("\n");
        }

        System.out.println(sb);
    } 

    public static class player implements Comparable<player>{
        int num;
        int score;

        player(int num, int score){
            this.num = num;
            this.score = score;
        }

        @Override
        public int compareTo(player o) {
            // TODO Auto-generated method stub
            int result = o.score - this.score;

            if(result == 0)
                result = this.num - o.num;

            return result;
        }
    }
}
728x90
๋ฐ˜์‘ํ˜•