문제의 저작권은 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. 실행시간
실행시간을 중점으로 짜는 동기들고 있을 거고
실행시간에 구애받지 않고 전체적인 구조를 생각하며 짜는 동기들도 있을 거라 큰 의미가 있겠냐 싶냐만은
개인적으로 이 실행시간 비교하는 게 너무 재밌다.
경쟁심리를 불타오르게 한다. 🔥🔥
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 |
댓글