Notice
Recent Posts
Recent Comments
Link
뭐라도 배우면 기록하자
[알고리즘 문제풀이] 최빈수 구하기 본문
문제 출처: https://swexpertacademy.com 의 1204번 문제
삼성 측에서 "※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다." 라고 하여 제 코드와 간단한 코드 설명만 업로드하겠습니다.
내가 작성한 코드
#include <stdio.h>
#include <stdlib.h>
int
main(
void
){
int
array[101];
//점수는 0점 ~100점 사이의 정수이므로 배열의 Index를 학생 점수, 배열의 Value를 해당 점수 빈도수로 사용하기 위함
int
loop, score, max, maxIndex;
scanf
(
"%d"
, &loop);
int
* num = (
int
*)
malloc
(
sizeof
(
int
)*loop); //Test case 수에 따라 해당 크기의 배열 생성(정답 넣어두기 위함)
for
(
int
i = 0; i < loop; i++){
for
(
int
j = 0 ; j < 101; j++){
array[j] = 0;
}
int
cur_loop;
scanf
(
"%d"
, &cur_loop);
//이 부분 때문에 에러 꽤 났었네요.. input 모두가 학생 점수라고 생각했어서...
for
(
int
q = 0; q < 1000; q++){
scanf
(
"%d"
, &score) ;
array[score]++;
//Input(학생 점수)에 따라 배열의 Index(학생점수)의 value(빈도수)를 +1
}
max = 0;
maxIndex = 0;
for
(
int
k = 0; k < 101; k++){
if
(max <= array[k]){
//최빈수를 구하는 부분
max = array[k];
maxIndex = k;
}
}
num[cur_loop-1] = maxIndex;
//최빈수를 정답 배열에 초기화
}
for
(
int
p = 1; p < loop+1; p++){
printf
(
"#%d %d\n"
, p, num[p-1]);
}
free
(num);
return
0;
}
점수는 0점 ~ 100점 사이의 정수이니까 이를 기반으로 배열의 Index를 학생의 점수로 생각하는 것이 관건이었던 것 같습니다. 최빈수 자체는 갯수 파악(MAX값 찾기)로 쉬운 부분이나, 입력 값(학생 점수)를 어떻게 저장해둘 것이고 어떻게 빈도수를 파악할 것인가가 이번 문제를 풀 수 있는지 없는지를 나눈 것 같네요.
'프로그래밍언어공부 > C' 카테고리의 다른 글
[알고리즘 문제풀이] 조교의 성적 매기기 (0) | 2019.01.06 |
---|---|
[알고리즘 문제풀이] View (0) | 2019.01.01 |
[알고리즘 문제풀이] 분수찾기 (0) | 2018.12.25 |
[알고리즘 문제풀이] 벌집 (0) | 2018.12.24 |
[C언어] chap28 도전 프로그래밍 4-5 (0) | 2018.04.25 |
Comments