개발자꿈나무

3. 최빈수와 횟수 구하기 본문

알고리즘

3. 최빈수와 횟수 구하기

망재이 2023. 2. 5. 17:45

< 1~10까지의 수 중 최빈수와 그 횟수 구하기(중복일 경우 더 작은 수의 값 출력) >

 

  • 배열과 for문을 이용해서 최빈수, 그 횟수를 구하는 프로그램을 구현해보겠다.
  • 사용자로부터 1~10까지의 수를 입력받아 저장할 배열1, 각각의 값들의 수를 저장할 배열2 필요
  • 가장 출력횟수가 많은 수를 구해야하므로 max변수 설정
  • 최빈수의 횟수를 구해야하므로 maxCnt변수 설정

1. 변수와 배열 초기화 해주기

Scanner in = new Scanner(Sytem.in);

int[] arr = new int[10];		//사용자로부터 값을 입력받아 저장할 배열
int[] count = new int[10];		//arr에 저장된 값들의 횟수를 저장할 배열
int maxCnt = 0;					//최빈수의 횟수 저장
int maxIndex = 0;				//최빈수 저장

 

2. 사용자로 값 입력받아 arr배열에 저장하고 count배열에 각 값의 횟수 저장

for(int i=0;i<arr.length;i++) {
    arr[i]=in.nextInt();
    count[arr[i]]++;
}
더보기

☆ 참고 ★

count배열 주의!
count[]의 index값의 자리에 arr[i]를 넣어서 저장을 해준다는게 포인트!
예를 들어 1 2 2 3 2 의 값을 입력받았다고 하면 현재 arr배열에는

arr[0] = 1

arr[1] = 2

arr[2] = 2

arr[3] = 3

arr[4] = 2 이 들어있고, 이걸 count[arr[i]]++로 표현하면,

count[arr[0]] = count[1]이랑 똑같고, count[arr[1]] = count[2]랑 똑같음

결국 count[1]을 1증가 시키고, count[2]를 1증가 시키란 뜻으로 count배열에는

count[0] = 0

count[1] = 1

count[2] = 3

count[3] = 1

count[4] = 0 이 들어가게 됨. 그럼 결국 count배열에서 가장 큰 수인 3의 인덱스 2가 arr배열에서 가장 많이 입력이 된 값이고, 3은 2가 입력된 횟수가 됨

이 원리를 잘 이해하는게 중요!!

 

3. maxCnt 변수를 이용해서 count 배열 안에서 제일 큰 값을 찾고, maxIndex 값을 이용해서 제일 큰 값이 들어있는 index값 찾기

(이 문제는 중복 부분에 대해서 딱히 언급한 부분이 없으므로, 더 작은 수를 출력하도록 조건을 걸어줌)

int maxCnt = 0;
int maxIndex=0;

for(int i=0;i<count.length;i++) {
    if(count[i]>maxCnt) {
        maxCnt = count[i];
        maxIndex = i;
    }
}

System.out.println("최빈수는: "+maxIndex+", 횟수는: "+maxCnt);

 

 

== 전체 코드 ==

더보기
import java.util.Scanner;

//최빈수를 배열과 for문을 이용해 출력 

public class MaxFrequency
{

	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		
		int[] arr = new int[10];
		int[] count = new int[arr.length];
		
		for(int i=0;i<arr.length;i++) {
			arr[i]=in.nextInt();
			count[arr[i]]++;
			
		}
		
		int maxCnt = 0;
		int maxIndex=0;
		
		for(int i=0;i<count.length;i++) {
			if(count[i]>maxCnt) {
				maxCnt = count[i];
				maxIndex = i;
			}
		}
		
		System.out.println("최빈수는: "+maxIndex+", 횟수는: "+maxCnt);
		

	}

}
728x90