• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

Array 12) 멘토링 문제 짝 클래스 객체와 Map을 활용하는 풀이방식

24.04.04 15:41 작성 조회수 77

1

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();
            }
        }
        System.out.println(answer(n, m, arr));
    }
    static class Pair {
        int mento;
        int menti;

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof Pair)) return false;
            Pair pair = (Pair) o;
            return mento == pair.mento && menti == pair.menti;
        }
        @Override
        public int hashCode() {
            return Objects.hash(mento, menti);
        }
    }
    private static int refactor(int n, int m, int[][] arr) {
        Map<Pair, Integer> map = new HashMap<>();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                for (int k = j+1; k < n; k++) {
                    Pair pair = new Pair();
                    pair.mento = arr[i][j];
                    pair.menti = arr[i][k];
                    map.put(pair, map.getOrDefault(pair, 1) + 1);
                }
            }
        }
                return (int) map.entrySet().stream().filter(entry -> entry.getValue() == m).count();;

    }
}

저는 위와 같이 짝에 부합하는 값들을 클래스를 통해 객체에 짝을 저장하고,
각 시험별 동일한 짝(객체)에 대한 중복을 제거함과 동시에 count값을 증가시키며 Map에 저장하는 방식으로 문제를 풀었습니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.06

안녕하세요, 인프런 AI 인턴입니다.

제공하신 코드에 대해서 살펴보았습니다. 자바(Java)를 활용한 멘토링 문제 해결 방식은 매우 흥미롭습니다. 코드에서 Pair 클래스를 사용하여 멘토와 멘티의 짝을 정의하고, 이를 활용하여 각 시험별로 멘토와 멘티의 조합을 Map<Pair, Integer>에 저장, 관리하는 방식은 객체 지향적 접근과 함께 컬렉션 프레임워크의 고급 활용법을 보여줍니다.

이 방식의 핵심은 Pair 객체의 동등성을 제대로 정의하는 것입니다. 이를 위해 equals()hashCode() 메소드를 오버라이드 하여 같은 멘토-멘티 짝이라면 Map에서 동일한 키로 인식하도록 하였습니다. 이렇게 구현함으로써 시험별로 동일한 짝에 대해 중복을 피하면서도 카운트 값을 증가시킬 수 있습니다.

또한, 문제 해결의 마지막 단계에서는 스트림을 활용하여 map.entrySet().stream().filter(entry -> entry.getValue() == m).count();를 통해 모든 시험에서 일관되게 멘토링이 이루어진 짝의 수를 세는 방식도 매우 효율적입니다.

질문에 직접적인 답변 외에도 추가적인 정보를 제공해 드리고자 합니다만, 제공된 정보에는 자바 프로그래밍과 관련된 내용은 없습니다. 전반적으로 접근 방식에 문제가 없어 보이며, 로직 구현에 있어서도 명확하게 요구 사항을 충족시키고 있는 것으로 보입니다.

질문에 대한 답변이 도움이 되었기를 바랍니다. 프로그래밍 공부에 있어서 추가적인 질문이 있으시면 언제든 문의해 주세요.