알고리즘

11월 22일 1문제 - Java : Array

 

1. 멘토링

현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니다.

멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것입니다.

선생님은 M번의 수학테스트 등수를 가지고 멘토와 멘티를 정합니다.

만약 A학생이 멘토이고, B학생이 멘티가 되는 짝이 되었다면, A학생은 M번의 수학테스트에서 모두 B학생보다 등수가 앞서야 합니다.

M번의 수학성적이 주어지면 멘토와 멘티가 되는 짝을 만들 수 있는 경우가 총 몇 가지 인지 출력하는 프로그램을 작성하세요.


1. 1 번째 ,2 번째 for문은 멘토링이 되는 학생의 수 만큼의 경우의수에 따라 검색 하기 위함 

 

2. 3번째 for문은 그 경우의 수가 test만큼 있기 때문

 

3. 4번째 for문은 본인 등수와 상대방의 등수를 확인하기 위함

 

import java.util.Scanner;

public class Test2_12 {

  public int solution(int st, int test, int[][] arr) {
    int result = 0;
    // 학생 수 만큼 -> 1번 부터 시작 (학생번호)
    for (int i = 1; i <= st; i++) {
      for (int j = 1; j <= st; j++) {
        int count = 0;
        // 테스트 수 만큼
        for (int k = 0; k < test; k++) {
          int positionI = 0,positionJ = 0;
          // 등 수 만큼(학생 수)
          for (int s = 0; s < st; s++) {
            // 해당 위치에 본인 번호가 있으면 본인은 s등 이다.
            if (arr[k][s] == i) positionI = s;
            if (arr[k][s] == j) positionJ = s;
          }
          if (positionI < positionJ) count++;
          System.out.println(count);
        }
        if (count == test) result++;
      }
    }

    return result;
  }

  public static void main(String[] args) {
    Test2_12 main = new Test2_12();
    Scanner sc = new Scanner(System.in);
    int student = sc.nextInt();
    int testNumber = sc.nextInt();
    int[][] arr = new int[testNumber][student];
    for (int i = 0; i < testNumber; i++) {
      for (int j = 0; j < student; j++) {
        arr[i][j] = sc.nextInt();
      }
    }
    System.out.println(main.solution(student, testNumber, arr));
  }
}