개발자꿈나무
3. 최빈수와 횟수 구하기 본문
< 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
'알고리즘' 카테고리의 다른 글
트리 구조 (0) | 2023.03.02 |
---|---|
우선순위 큐(Priority Queue) (0) | 2023.02.25 |
2. 피보나치 수열(재귀x, 배열과 for문 사용) (0) | 2023.02.05 |
1. 학생 이름, 학번 출력 프로그램 (0) | 2023.02.05 |
배열 - 최댓값, 역순 정렬, 복사 (0) | 2023.01.30 |