알고리즘 8일차 배열

쿠우·2022년 8월 5일
0

설명
김갑동 선생님은 올해 6학년 1반 담임을 맡게 되었다.
김갑동 선생님은 우선 임시로 반장을 정하고 학생들이 서로 친숙해진 후에 정식으로 선거를 통해 반장을 선출하려고 한다.
그는 자기반 학생 중에서 1학년부터 5학년까지 지내오면서 한번이라도 같은 반이었던 사람이 가장 많은 학생을 임시 반장으로 정하려 한다.

예시 입력 1
5
2 3 1 7 3
4 1 9 6 8
5 5 2 4 4
6 5 2 6 7
8 4 2 2 2

예시 출력 1
4

public class Main {

	public static void solution(int[][] input) {
		
		int cpCount=0;
		int cp = 0;
		for(int i=0; i<input.length ;i++) {
			int count=0;
			
			for(int j=0; j<input.length; j++) {
				
				for(int k=0; k<5; k++) {
					if(input[j][k] == input[i][k]) {
						count++;
						break;
					}//if
				}//for
				
			}// for
			
			if(count > cpCount){
				cp=i;
				cpCount=count;
			}//if
			
		}// for
		
		System.out.println(cp+1);

	} // solution
	
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int input = sc.nextInt();
		int[][] tmp = new int[input][5]; 
		
		for(int i=0 ; i<input; i++) {
			
			for(int j=0 ; j<5; j++) {
					int input2 = sc.nextInt();
					tmp[i][j] = input2;
			}//for
		}//for
		
		solution(tmp);

	} // main
}// end class

알고리즘
1. 학생끼리 같은 반이 있었는지 확인한다
2. 한번이라도 같은반이 되었다면 카운트 세고 다음 학생과 비교
3. 가장 많이 된 학생과의 카운트를 비교하여 변경할지 말지 결정


설명
현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니다.
멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것입니다.
선생님은 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등을 의미합니다.

출력
첫 번째 줄에 짝을 만들 수 있는 총 경우를 출력합니다.

예시 입력 1
4 3
3 4 1 2
4 3 2 1
3 1 4 2

예시 출력 1
3

출력설명
(3, 1), (3, 2), (4, 2)와 같이 3가지 경우의 (멘토, 멘티) 짝을 만들 수 있다.


import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void solution(int length,int[][] input) {
		
		int count = 0;
		
		for(int  i=1; i<=length; i++) {
			
			for(int j=1; j<=length;j++) {
				boolean mento = true;
				for(int k=0; k<input.length ;k++) {
					String test = Arrays.toString(input[k]).replaceAll(",", " ").replace("[", " ").replace("]", " ");
					if(test.indexOf(" "+i+" ") >= test.indexOf(" "+j+" ")) {
						mento = false;
						break;
					} // if
				}//for
				if(mento==true) {count ++;}
			}//for
		}//for
		
		System.out.println(count);
		
	} // solution
	
	
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int input2 = sc.nextInt();
		int input1 = sc.nextInt();
		
		int[][] tmp = new int[input1][input2];
		
		for(int i =0 ; i < input1; i++) {
			
			for(int j=0; j < input2; j++) {
				tmp[i][j] = sc.nextInt();
			}//for
		}//for
		
		solution(input2,tmp); 
		
	} // main
}// end class

알고리즘
1.입력받는다.

2.학생수에 맞춰 각 학생에 대해 고정으로 비교하는 반복문 실행
-String으로 변환시켜서 비교 (세부적인 등수는 다르게 출력되어도 비교는 가능하기에)
-한 번이라도 앞과 뒤의 순서가 꼬이면 다음 학생이랑 비교

  1. 카운트 출력
profile
일단 흐자

1개의 댓글

comment-user-thumbnail
2022년 8월 5일
답글 달기