[문제풀이] 02-11. 임시 반장 정하기

𝒄𝒉𝒂𝒏𝒎𝒊𝒏·2023년 10월 28일
0

인프런, 자바(Java) 알고리즘 문제풀이

Array(1, 2차원 배열) - 0211. 임시 반장 정하기


🗒️ 문제


🎈 나의 풀이

	private static int solution(int n, String[][] strArr) {
        int answer = 1, max = 0;
        int [] dupClassSum = new int[n];

        for(int i=0; i<n; i++) {
            for(int j=0; j<n; j++) {
                dupClassSum[i] += dupClassCheck(strArr[i], strArr[j]);
            }

            if(max < dupClassSum[i]) {
                answer = i + 1;
                max = dupClassSum[i];
            }
        }


        return answer;
    }

    private static int dupClassCheck(String[] str1, String[] str2) {
        for(int i=0; i<5; i++) {
           if(str1[i].equals(str2[i])) return 1;
        }

        return 0;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        String[][] strArr = new String[n][];

        for(int i=0; i<n; i++) {
            strArr[i] = sc.nextLine().split(" ");
        }
        System.out.println(solution(n ,strArr));
    }


🖍️ 강의 풀이

    public int solution(int n, int[][] arr){
		int answer=0, max=0;
		for(int i=1; i<=n; i++){
			int cnt=0;
			for(int j=1; j<=n; j++){
				for(int k=1; k<=5; k++){
					if(arr[i][k]==arr[j][k]){
						cnt++;
						break;
					}
				}
			}
			if(cnt>max){
				max=cnt;
				answer=i;
			}
		}
		return answer;
	}

	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		int[][] arr=new int[n+1][6];
		for(int i=1; i<=n; i++){
			for(int j=1; j<=5; j++){
				arr[i][j]=kb.nextInt();
			}
		}
		System.out.print(T.solution(n, arr));
	}


💬 짚어가기

해당 문제는 n번 학생과 나머지 학생이 같은 반이 될 수 있는 모든 경우의 수를 순회하는 문제이다.
2중 for문을 통해 O(N2)O(N^2)번의 연산을 수행하며, 각 연산에서 한번 더 1학년 ~ 5학년 사이에
같은 반이 된 경우를 찾는다. 이 떄 비교연산은 최대 25번을 넘지 않게된다.

순회하며 비교하는 것 외에 특별한 로직은 없다. 본인은 문제를 제대로 읽지 않아, 연이은 오답 처리에
의아해 하며 무려 한 시간 동안 삽질을 했다. 무슨 일이든 정확한 요구 사항 파악이 중요한 것 같다.

profile
𝑶𝒏𝒆 𝒅𝒂𝒚 𝒐𝒓 𝒅𝒂𝒚 𝒐𝒏𝒆.

0개의 댓글