01-25 14:01
Recent Posts
Recent Comments
관리 메뉴

miinsun

[Algorithm]μ•Œκ³ λ¦¬μ¦˜ μžλ°”_23 λ©˜ν† λ§ λ³Έλ¬Έ

Algorithm/Java

[Algorithm]μ•Œκ³ λ¦¬μ¦˜ μžλ°”_23 λ©˜ν† λ§

miinsun 2022. 1. 4. 12:31

 

πŸ’¬ λ¬Έμ œ μ„€λͺ…

ν˜„μˆ˜λ„€ 반 μ„ μƒλ‹˜μ€ 반 ν•™μƒλ“€μ˜ μˆ˜ν•™μ μˆ˜λ₯Ό ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ λ©˜ν† λ§ μ‹œμŠ€ν…œμ„ λ§Œλ“€λ €κ³  ν•©λ‹ˆλ‹€. λ©˜ν† λ§μ€ λ©˜ν† (λ„μ™€μ£ΌλŠ” 학생)와 λ©˜ν‹°(도움을 λ°›λŠ” 학생)κ°€ ν•œ 짝이 λ˜μ–΄ λ©˜ν† κ°€ λ©˜ν‹°μ˜ μˆ˜ν•™κ³΅λΆ€λ₯Ό λ„μ™€μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

μ„ μƒλ‹˜μ€ M번의 μˆ˜ν•™ν…ŒμŠ€νŠΈ λ“±μˆ˜λ₯Ό 가지고 λ©˜ν† μ™€ λ©˜ν‹°λ₯Ό μ •ν•©λ‹ˆλ‹€. λ§Œμ•½ A학생이 λ©˜ν† μ΄κ³ , B학생이 λ©˜ν‹°κ°€ λ˜λŠ” 짝이 λ˜μ—ˆλ‹€λ©΄, A학생은 M번의 μˆ˜ν•™ν…ŒμŠ€νŠΈμ—μ„œ λͺ¨λ‘ B학생보닀 λ“±μˆ˜κ°€ μ•žμ„œμ•Ό ν•©λ‹ˆλ‹€.

M번의 μˆ˜ν•™μ„±μ μ΄ 주어지면 λ©˜ν† μ™€ λ©˜ν‹°κ°€ λ˜λŠ” 짝을 λ§Œλ“€ 수 μžˆλŠ” κ²½μš°κ°€ 총 λͺ‡ 가지 인지 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

 

 

πŸ”¨ μž…μΆœλ ₯ 예

μž…λ ₯ - 첫 번째 쀄에 반 학생 수 N(1<=N<=20)κ³Ό M(1<=M<=10)이 주어진닀.

두 번째 쀄뢀터 M개의 쀄에 걸쳐 μˆ˜ν•™ν…ŒμŠ€νŠΈ κ²°κ³Όκ°€ ν•™μƒλ²ˆν˜Έλ‘œ 주어진닀. ν•™μƒλ²ˆν˜Έκ°€ 제일 μ•žμ—μ„œλΆ€ν„° 1λ“±, 2λ“±, ...Nλ“± 순으둜 ν‘œν˜„λœλ‹€.

λ§Œμ•½ ν•œ 쀄에 N=4이고, ν…ŒμŠ€νŠΈ κ²°κ³Όκ°€ 3 4 1 2둜 μž…λ ₯λ˜μ—ˆλ‹€λ©΄ 3번 학생이 1λ“±, 4번 학생이 2λ“±, 1번 학생이 3λ“±, 2번 학생이 4등을 μ˜λ―Έν•©λ‹ˆλ‹€.

4 3
3 4 1 2
4 3 2 1
3 1 4 2

좜λ ₯ - μ²« 번째 쀄에 짝을 λ§Œλ“€ 수 μžˆλŠ” 총 경우λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

3

Hint - (3, 1), (3, 2), (4, 2)와 같이 3가지 경우의 (λ©˜ν† , λ©˜ν‹°) 짝을 λ§Œλ“€ 수 μžˆλ‹€.

 

 

πŸ’» Solution.java

import java.util.Scanner;

public class Main {
   public int solution(int n, int m, int[][] arr) {
      //2차원 배열을 μ΄μš©ν•œ 4쀑 forλ¬Έ
      int answer = 0;
      
      for(int i = 1; i <= n; i++) {
         for(int j = 1; j <= n; j++) {
            int cnt = 0;
            for(int k = 0; k < m; k++) {
               int pi=0, pj=0;
               for(int s = 0; s < n; s++) {
                  if(arr[k][s] == i) pi = s;
                  if(arr[k][s] == j) pj = s;
               }
               
               if(pi<pj) cnt++;
            }
            if(cnt == m)
               answer++;
         }
      }
      return answer;
   }
   
   public static void main(String[] args){
      Main main  = new Main();
      Scanner sc =new Scanner(System.in);
      int n = sc.nextInt();
      int m = sc.nextInt();
      int[][] arr = new int[m][n];
      
      for(int i = 0; i < m; i++) {
         for(int j = 0; j < n; j++) {
            arr[i][j] = sc.nextInt();
         }
      }
      
      System.out.println(main.solution(n , m, arr));
      
      sc.close();
   }
}

 

 

 

Comments