[Java] 멘토링 - Array(1, 2차원 배열)

2024. 11. 14. 18:12·💡 Algorithm/인프런

Problem 💻

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

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

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

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

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

 

Solution 💡

1. 4중 for문 사용

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        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();
            }
        }

        Main main = new Main();
        System.out.println(main.solution(n, m, arr));

    }

    public int solution(int n, int m, int[][] arr) {
        int answer = 0;

        for (int i = 1; i <= n; i++) { // 1
            for (int j = 1; j <= n; j++) {
                int mentorScore = 0;
                int menteeScore = 0;
                int count = 0;

                for (int k = 0; k < m; k++) { // 2
                    for (int s = 0; s < n; s++) {
                        if (arr[k][s] == i) {
                            mentorScore = s;
                        }

                        if (arr[k][s] == j) {
                            menteeScore = s;
                        }
                    }

                    if (mentorScore < menteeScore) { // 3
                        count++;
                    }
                }
                if (count == m) {
                    answer++;
                }
            }
        }

        return answer;
    }
}

전제

  • n 은 학생의 수를 의미하며 m 은 테스트의 횟수를 의미한다.
  • arr은 각 테스트 결과를 저장하기 위한 2차원 배열로, 각 행(arr[k])은 k번째 테스트 결과를 1등부터 차례로 학생 번호의 순서로 저장한다.
  • count는 i가 멘토, j가 멘티가 되는 조건을 만족하는 테스트 횟수를 누적하는 변수이다.

풀이

  1. 외부 for 루프는 가능한 모든 멘토(i)와 멘티(j) 쌍을 탐색한다.
    • i가 멘토가 되고 j가 멘티가 될 수 있는지를 확인하기 위해 학생 i와 j가 각 테스트에서 어떤 순위를 차지했는지 탐색하는 루프문이다.
    • ex) 1, 2 → 1, 3 → 1, 4 → 2, 1 → 2, 3, → 2, 4 → 3, 1 → 3, 2 → 3, 4 → 4, 1 → 4, 2 → 4, 3
  2. 내부 for 루프에서는 테스트 횟수인 m 만큼 돌면서 현재 테스트의 등수(s)가 멘토 학생(i)라면 mentorScore , 멘티 학생(j)라면 menteeScore 변수에 현재 등수를 저장한다
  3. 멘토의 등수가 멘티보다 높다면(숫자가 작을수록 등수가 높다.) count를 증가시킨다
  4. 모든 테스트에서 멘토가 멘티보다 항상 앞섰다면, count == m 조건을 만족하게 되어 answer가 증가하게 된다.

 


인프런 - 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의에 나오는 알고리즘 문제입니다.

 

저작자표시 비영리 (새창열림)

'💡 Algorithm > 인프런' 카테고리의 다른 글

[Java] 이진트리순회(깊이우선탐색)  (0) 2025.02.20
[Java] 매출액의 종류  (2) 2024.11.27
[Java] 두 배열 합치기 - Two-Pointers Algorithm  (0) 2023.10.28
[Java] 등수구하기 - Array(1, 2차원 배열)  (0) 2023.10.24
[JAVA] 임시반장 정하기 - Array(1, 2차원 배열)  (0) 2023.10.23
[JAVA] 봉우리 - Array(1, 2차원 배열)  (0) 2023.10.22
'💡 Algorithm/인프런' 카테고리의 다른 글
  • [Java] 이진트리순회(깊이우선탐색)
  • [Java] 매출액의 종류
  • [Java] 두 배열 합치기 - Two-Pointers Algorithm
  • [Java] 등수구하기 - Array(1, 2차원 배열)
현주먹
현주먹
대구 불주먹 출신 현주먹의 개발.log
  • 현주먹
    현주먹의 개발로그
    현주먹
  • 전체
    오늘
    어제
    • 전체글 (179)
      • 👶🏻 CS (15)
        • Operating System (7)
        • DB (5)
        • Data Structure (2)
        • Software Engineering (1)
      • 💻 Dev (54)
        • Java & OOP (24)
        • Spring (4)
        • DB&JPA (6)
        • Test Code (1)
        • JSP & Servlet (13)
        • Etc (6)
      • 💡 Algorithm (25)
        • 인프런 (9)
        • 백준 (16)
      • 🛠 DevOps & Tool (11)
        • Linux (4)
        • AWS (1)
        • Git (2)
        • Etc (4)
      • 📝 끄적끄적 (74)
        • 후기 및 회고 (11)
        • TDD, 클린 코드 with Java 17기 (3)
        • F-Lab (23)
        • 🖥️ 자바의 정석 (11)
        • 📖 Clean Code (3)
        • 항해99 코테 스터디 (11)
        • 📖 가상 면접 사례로 배우는 대규모 시스템 설계 .. (11)
  • 블로그 메뉴

    • 🐈‍⬛ GitHub
    • TIL repository
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 태그

    오라클
    개구리책
    백준
    코딩테스트준비
    NextSTEP
    티스토리챌린지
    자바의정석
    til
    JPA
    인프런 특정문자뒤집기
    F-Lab
    개발자멘토링
    f-lab 후기
    오블완
    객체지향
    jsp
    로또 미션
    TDD 클린 코드 with Java
    ==와 equals()
    항해99
    99클럽
    2025스프링캠프
    에프랩
    데브클럽
    개발자취업
    jsp 2.3 웹 프로그래밍: 기초부터 중급까지
    자바의신절판
    코테스터디
    C
    에프랩 후기
  • hELLO· Designed By정상우.v4.10.2
현주먹
[Java] 멘토링 - Array(1, 2차원 배열)
상단으로

티스토리툴바