본문 바로가기
Algorithm(알고리즘)/SWEA(SW Expert Academy)

[SWEA][Java][D2] 1204 - [S/W 문제해결 기본] 1일차 - 최빈수 구하기

by Jun_N 2021. 1. 26.

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13zo1KAAACFAYh&categoryId=AV13zo1KAAACFAYh&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 


문제 풀이

 

이 문제는 전형적으로 빈도수를 체크하는 문제이다.

 

빈도수를 체크하는 문제에서는 1차원 배열을 만들어주고 그 배열의 index에 +1만큼 더해주면서 빈도수를 증가시켜주면 된다.

 

입력을 최소 1000개 받아야 하기 때문에 시간의 효율성을 위해 bufferedReader를 사용하였다.

 

 점수를 입력받고 해당 점수를 +1씩 증가시켜 준다. 그리고 제일 많은 빈도수를 가진 수를 구하고 그 해당 index값까지 함께 저장하면 된다.

package D2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class D2_1285 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		for (int tc = 1; tc <= T; tc++) {
			int T2=Integer.parseInt(br.readLine());
			int[] used=new int[101];
			int score=0;
			StringTokenizer st=new StringTokenizer(br.readLine());
			for(int i=0;i<1000;i++) {
				score=Integer.parseInt(st.nextToken());
				used[score]+=1;
			}
			int max=0;
			int ans=0;
			for(int i=0;i<101;i++) {
				if(max<=used[i]) {
					max=used[i];
					ans=i;
				}
			}
			System.out.printf("#%d %d\n",tc,ans);
			

		}
	}

}

이걸로 D1,D2 모두 완료!!

 

이제 D3을 정복해야 겠다!!