๋ฐฑ์ค€(boj)

[JAVA]18869 ๋ฉ€ํ‹ฐ๋ฒ„์Šค2 , ์ขŒํ‘œ์••์ถ•

cons-ps 2023. 7. 28. 17:12

 ๐Ÿ“š ๋ฌธ์ œ  

 

18869๋ฒˆ: ๋ฉ€ํ‹ฐ๋ฒ„์Šค โ…ก

M๊ฐœ์˜ ์šฐ์ฃผ๊ฐ€ ์žˆ๊ณ , ๊ฐ ์šฐ์ฃผ์—๋Š” 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„ ํ–‰์„ฑ์ด N๊ฐœ ์žˆ๋‹ค. ํ–‰์„ฑ์˜ ํฌ๊ธฐ๋ฅผ ์•Œ๊ณ  ์žˆ์„๋•Œ, ๊ท ๋“ฑํ•œ ์šฐ์ฃผ์˜ ์Œ์ด ๋ช‡ ๊ฐœ์ธ์ง€ ๊ตฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๊ตฌ์„ฑ์ด ๊ฐ™์€๋ฐ ์ˆœ์„œ๋งŒ ๋‹ค๋ฅธ ์šฐ์ฃผ์˜ ์Œ

www.acmicpc.net

 

๐Ÿ” ์•„์ด๋””์–ด  

์ฒ˜์Œ์—๋Š” ๊ทธ๋ƒฅ ๊ธฐ๋ณธ์ ์ธ bruteforceํ’€์ด๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋‹ค. ๊ณจ๋“œ ๋ฌธ์ œ์— ์–ด์šธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๋ฐ”๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

์ด ํ’€์ด๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฉ€ํ‹ฐ๋ฒ„์Šค 1๋ฒˆ์— ๋„ฃ์œผ๋‹ˆ ํ†ต๊ณผ๋˜์—ˆ๋‹ค(๋ธŒ๋ก ์ฆˆ 5)

 

๋ชปํ’€๊ฒ ๋‹ค ํ•˜๊ณ  ์นจ๋Œ€์— ๋ˆ„์›Œ์žˆ์—ˆ๋Š”๋ฐ ๊ฐ ํ–‰์„ฑ์— ๋“ฑ์ˆ˜๋ฅผ ๋งค๊ธฐ๊ณ  ๊ทธ ๋“ฑ์ˆ˜๊ฐ€ ๋™์ผํ•œ ์šฐ์ฃผ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋™์ผํ•˜๊ฒŒ ๊ท ๋“ฑํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‹น ์ •๋ ฌ์„ ํ•˜๊ณ  ๋“ฑ์ˆ˜๋ฅผ ๋งค๊ฒผ๋‹ค.

 

๋“ฑ์ˆ˜๋ฅผ ๋งค๊ธธ๋•Œ ๋™์ผํ•œ ์ˆซ์ž๋Š” ๋™์ผํ•œ ๋“ฑ์ˆ˜๋ฅผ ์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ list์— ๋„ฃ๊ณ  indexOf๋ฅผ ์ด์šฉํ•ด์„œ ๋“ฑ์ˆ˜๋ฅผ ๋งค๊ฒผ๋‹ค. ๊ทธ๋Ÿฐ ํ›„ ํ•ด์‹œ์— ํ•ด๋‹น ๋ฐฐ์—ด์„ ์ŠคํŠธ๋ง ๋ณ€ํ™˜ ํ›„ ๋งˆ์ง€๋ง‰์— ๊ณ„์‚ฐํ•ด์„œ ๋‹ต์„ ๋‚ด์—ˆ๋‹ค -> ์‹œ๊ฐ„ ์ดˆ๊ณผ.

 

์ดํ›„์— ์ขŒํ‘œ ์••์ถ• ๊ธฐ๋Šฅ์„ ํ™•์ธํ•˜๊ณ  ์ขŒํ‘œ์••์ถ•๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€๋‹ค. ์ขŒํ‘œ ์••์ถ•์€ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ์—์„œ ์ž˜ ์„ค๋ช… ๋˜์–ด์žˆ์–ด ์ฐธ๊ณ ํ•˜์˜€๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ๊ธฐ์กด ๊ฐ’์„ ๋ชจ๋‘ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ณ  ์ •๋ ฌํ•œ ํ›„์— ํ•ด์‹œ์— {์ •๋ ฌ๊ฐ’, ํ˜„์žฌ ๋žญํ‚น๊ฐ’}์„ ๋„ฃ๊ณ  ๊ธฐ์กด ๋ฐฐ์—ด์„ ๋‹ค์‹œ ๋Œ๋ฉด์„œ ํ•ด๋‹น ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋žญํ‚น์„ ๋นผ์„œ ๋Œ€์ฒดํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ํ•ด๋‹น ๋ฐฉ๋ฒ•์ด ์•„๋‹Œ ์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•ด๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ ๋„๋Œ€์ฒด ๋ญ์ง€ ํ•˜๋‹ค๊ฐ€ ๋“ฑ์ˆ˜ ๋ฐฐ์—ด์„ ํ•ด์‹œ์— ๋„ฃ์ง€์•Š๊ณ  ์•ž์˜ ์šฐ์ฃผ๋“ค ์ค‘ ๋™์ผํ•œ ๊ฒŒ ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ์ •๋‹ต ๊ฐœ์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ฆ๊ฐ€ํ•˜๋„๋ก ํ•˜์˜€๋‹ค ์ด๋ ‡๊ฒŒ ํ•ด์„œ ํ†ต๊ณผํ•˜์˜€๋‹ค.(์ŠคํŠธ๋ง์ด ๊ธธ ๊ฒƒ ๊ฐ™์•„์„œ ๋ถˆ์•ˆํ•˜๊ธด ํ–ˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๋ผ๋‹ˆ์ด)

 

https://st-lab.tistory.com/279

 

[๋ฐฑ์ค€] 18870๋ฒˆ : ์ขŒํ‘œ ์••์ถ• - JAVA [์ž๋ฐ”]

https://www.acmicpc.net/problem/18870 18870๋ฒˆ: ์ขŒํ‘œ ์••์ถ• ์ˆ˜์ง์„  ์œ„์— N๊ฐœ์˜ ์ขŒํ‘œ X1, X2, ..., XN์ด ์žˆ๋‹ค. ์ด ์ขŒํ‘œ์— ์ขŒํ‘œ ์••์ถ•์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค. Xi๋ฅผ ์ขŒํ‘œ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ X'i์˜ ๊ฐ’์€ Xi > Xj๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์„œ๋กœ ๋‹ค

st-lab.tistory.com

 

๐Ÿ“ ํ’€์ด 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Boj_18869_๋ฉ€ํ‹ฐ๋ฒ„์Šค2 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        st = new StringTokenizer(br.readLine());
        int galaxyCnt = Integer.parseInt(st.nextToken());//์šฐ์ฃผ์˜ ๊ฐœ์ˆ˜
        int planetCnt = Integer.parseInt(st.nextToken());//์šฐ์ฃผ ํ–‰์„ฑ์˜ ์ˆ˜

        int[] map = new int[planetCnt];
        int[][] ranks = new int[galaxyCnt][planetCnt];

        List<Integer> sorted = new ArrayList<>();
        HashMap<Integer, Integer> sortedHash = new HashMap<>();
        int rank, cnt = 0;

        for (int i = 0; i < galaxyCnt; i++) {
            st = new StringTokenizer(br.readLine());
            sorted.clear();
            sortedHash.clear();

            for (int j = 0; j < planetCnt; j++) {
                map[j] = Integer.parseInt(st.nextToken());
                sorted.add(map[j]);
            }
            Collections.sort(sorted); //์šฐ์ฃผ์˜ ํ–‰์„ฑ์„ ์ •๋ ฌํ•œ๋‹ค.

            rank = 1;
            for (int j = 0; j < planetCnt; j++) {
                if (!sortedHash.containsKey(sorted.get(j)))
                    sortedHash.put(sorted.get(j), rank++); //๊ฐ ์ˆซ์ž์— ๋“ฑ์ˆ˜๋ฅผ ๋งค๊ธด๋‹ค
            }

            for (int j = 0; j < planetCnt; j++) {
                ranks[i][j] = sortedHash.get(map[j]); //๋งค๊ฒจ์ง„ ๋“ฑ์ˆ˜๋ฅผ ๊ฐ ํ–‰์„œ์˜ ์œ„์น˜์— ๋“ฑ๋กํ•ด์ค€๋‹ค.
            }

            //์ž์‹ ๋ณด๋‹ค ์•ž์— ์žˆ๋Š” ์šฐ์ฃผ๋“ค์ค‘์— ํ‰ํ–‰ํ•œ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ์ถ”๊ฐ€ํ•œ๋‹ค.
            for (int p = 0; p < i; p++) {
                if (check(ranks[i], ranks[p])) {
                    cnt++;
                }
            }
        }
        
        System.out.println(cnt);
    }

    private static boolean check(int[] a, int[] b) {
        for (int i = 0; i < a.length; i++) {
            if (a[i] != b[i]) {
                return false; //๋งŒ์•ฝ ๋“ฑ์ˆ˜๊ฐ€ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด ๋ฐ”๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. ( ๊ท ๋“ฑํ•˜์ง€ ์•Š๋‹ค )
            }
        }
        return true;
    }

}