๊ธฐ๋ก๋ฐฉ

BOJ_1411 : ๋น„์Šทํ•œ ๋‹จ์–ด ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1411 : ๋น„์Šทํ•œ ๋‹จ์–ด

Soom_1n 2022. 10. 20. 15:39

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1411๋ฒˆ: ๋น„์Šทํ•œ ๋‹จ์–ด

์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋‹จ์–ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹จ์–ด์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 50์ด๊ณ , N์€ 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋ชจ๋“  ๋‹จ์–ด์˜ ๊ธธ์ด๋Š” ๊ฐ™๊ณ , ์ค‘๋ณต

www.acmicpc.net



 

๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • n๊ฐœ์˜ ๋ฌธ์ž์—ด์—์„œ ์„œ๋กœ ๋น„์Šทํ•œ ์Œ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • ๋น„์Šทํ•˜๋‹ค๋Š” ์˜๋ฏธ๋Š” ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ๋งŒ ๋ณ€ํ™˜ ๋œ ์ƒํƒœ์ด๋‹ค.
    • ๋‹ค๋ฅธ ๋‘ ๋ฌธ์ž๊ฐ€ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋กœ ์ค‘๋ณต๋˜์–ด ๋ณ€ํ™˜๋˜์ง€ ๋ชปํ•œ๋‹ค.
  • ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด์ž
    • n๊ฐœ์˜ ๋ฌธ์ž์—ด์ด ๊ฐ–์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์Œ์„ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ ์„ ํƒ์ •๋ ฌ๊ณผ ๊ฐ™๋‹ค. O(n^2)
    • ๊ทธ ์•ˆ์—์„œ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•ด์•ผํ•œ๋‹ค. O(m)
    • ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n^2 * m)
      • ๊ณ„์‚ฐํ•˜๋ฉด 100*100*50 == 500,000(50๋งŒ) ์ด๋ฏ€๋กœ, ์‹œ๊ฐ„์ ์œผ๋กœ๋Š” ์—ฌ์œ ์žˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

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

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

        int n = Integer.parseInt(br.readLine());
        String arr[] = new String[n];

        for (int i = 0; i < n; i++)
            arr[i] = br.readLine();

        int answer = 0;
        for (int i = 0; i < n-1; i++){
            for (int j = i+1; j < n; j++){
                int chr[] = new int[27];
                int rev[] = new int[27];
                boolean flag = true;
                for (int k = 0; k < arr[i].length(); k++) {
                    int idx = arr[i].charAt(k) - 'a' + 1;
                    int temp = arr[j].charAt(k) - 'a' + 1;
                    if (chr[idx] == 0 && rev[temp] == 0) {
                        chr[idx] = temp;
                        rev[temp] = idx;
                    }
                    else if (chr[idx] != temp || rev[temp] != idx){
                        flag = false;
                        break;
                    }
                }
                if (flag) answer++;
            }
        }
        System.out.println(answer);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • n๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด arr์— ์ €์žฅํ•œ๋‹ค.
  • n๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ์Œ์„ ๊ฒ€์‚ฌํ•œ๋‹ค.
    • chr[ ] : ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜(a == 1)ํ•ด์„œ, ๋ณ€ํ™˜ํ–ˆ์„๋•Œ ์–ด๋–ค ๋ฌธ์ž์ธ์ง€ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    • rev[ ] : chr[ ]์˜ ๊ฐ’์ด rev[ ]์˜ ์ธ๋ฑ์Šค์ด๋‹ค. ํ•œ ๋ฌธ์ž๋ฅผ ์—ฌ๋Ÿฌ ๋ฌธ์ž๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์—†๊ฒŒ ํ•œ๋‹ค.
    • idx ๋Š” ๊ธฐ์ค€ ๋ฌธ์ž์—ด ์ค‘ ํ•œ ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค, temp๋Š” ๋น„๊ตํ•  ๋ฌธ์ž์—ด ์ค‘ ํ•œ ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค
      • chr[idx] == 0์ด๋ฉด ์•„์ง ์•ˆ๋‚˜์˜จ ๋ฌธ์ž์ด๊ณ , rev[temp] == 0 ์ด๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ž๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ’๋„ ์•„๋‹ˆ๋‹ค.
        • ์„œ๋กœ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
      • 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฉด, ์˜ค๋ฅ˜์ด๊ฑฐ๋‚˜ ๋ณ€ํ™˜ ๊ฐ’์ด ์ค‘๋ณต์ด๋ฏ€๋กœ ๋น„์Šทํ•œ ๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๋‹ค.
    • ๋น„์Šทํ•œ ๋ฌธ์ž์˜ ์ˆ˜๋ฅผ ์„ผ๋‹ค.
  • ๋น„์Šทํ•œ ๋ฌธ์ž์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • chr[ ]์™€ rev[ ]๋ฅผ ๋‚˜๋ˆ„์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์—์„œ ์„œ๋กœ ๊ฐ€๋ฆฌํ‚ค๊ฐ€ ๋งŒ๋“ค์–ด์„œ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ฒจ ํ’€์ด๊ฐ€ ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค.
  • ์˜ˆ์ „์— ๋ชปํ’€์—ˆ๋˜ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ํ‘ธ๋Š”๋ฐ ์–ด๋ ค์šด ๊ฑด ์•„๋‹Œ๋ฐ๋„ ์ƒ๊ฐ๋ณด๋‹ค ํ—ท๊น”๋ฆฌ๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•˜๋‹ค.

728x90