본문 바로가기
문제 풀이/SWEA

1204번 - 최빈수 구하기

by Kim Juhwan 2021. 8. 1.

문제의 저작권은 SW Expert Academy에 있습니다. (출처)

1. 문제
   1-1. 문제 설명
   1-2. 문제 해석
2. 코드
3. 실행시간

 

 


 

1. 문제

1-1. 문제 설명

 

 

1-2. 문제 해석

쉽게 말해서 입력 값 중에 가장 많이 나온 숫자를 출력하는 문제이다.

여러 가지 방법이 있을 수 있겠지만 카운팅 정렬이 가장 빠른 결과를 얻어낼 수 있는 방법이라고 생각했다.

카운팅 정렬은 입력 값의 범위가 적을 때 유용하다는 특징이 있는데 점수가 0점에서 100점 사이니 아주 적절하다고 할 수 있다.

 

2. 코드

public class Day1_1204_최빈수구하기 {
	public static void main(String[] args) throws IOException {
		final int MAX = 101;
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int tc = Integer.parseInt(br.readLine());

		for (int i = 1; i <= tc; i++) {
			br.readLine();

			// 입력을 받아 빈칸을 기준으로 분리해서 배열에 저장
			String[] scoreArr = br.readLine().split(" ");

			// 카운팅 정렬
			int[] counting = new int[MAX];
			for (String score : scoreArr) {
				counting[Integer.valueOf(score)]++;
			}

			// 최빈값 찾기
			int idx = 0;
			for (int j = 1; j < MAX; j++) {
				if (counting[j] >= counting[idx]) {
					idx = j;
				}
			}

			sb.append("#").append(i).append(" ").append(idx).append("\n");
		}

		System.out.println(sb.toString());
	}
}

실행시간을 단축하기 위해 BufferedReader와 StringBuilder를 같이 사용했다.

최빈값을 찾는 부분에서 원래는 최댓값을 따로 저장하면서 비교했는데

교수님의 코드를 보니 인덱스만 저장하면서 최댓값을 비교하는 걸 보고 조금 수정했다.

 

 

3. 실행시간

Java 사용한 동기들 중 3등을 했다.

 

실행시간을 중점으로 짜는 동기들고 있을 거고

실행시간에 구애받지 않고 전체적인 구조를 생각하며 짜는 동기들도 있을 거라 큰 의미가 있겠냐 싶냐만은

개인적으로 이 실행시간 비교하는 게 너무 재밌다.

경쟁심리를 불타오르게 한다. 🔥🔥

 

C++ 하고 자바는 비교 자체가 불가능하고 (넘사벽)

중복 제출을 생각하면 3등!

더 단축해보려고 했지만 방법이 떠오르지 않는다 ㅠㅠ

 

 

 

 


💡 느낀 점

  • 동기임에도 불구하고 온라인 수업이라 아직도 **님이라고 어색하게 불러야 하다니... 친해지고 싶다 동기들아!!
  • 항상 순위권을 먹는 동기들이 있다. 계속 미묘한 차이로 순위가 밀려나는 데 비결이 뭘까...

반응형

'문제 풀이 > SWEA' 카테고리의 다른 글

1210번 - Ladder1  (0) 2021.08.03
1220번 - Magnetic  (0) 2021.08.02
1208번 - Flatten  (0) 2021.08.02
1209번 - Sum  (0) 2021.08.02
1206번 - View  (0) 2021.08.01

댓글