1. 문제, 실행결과 예시
이번 문제는 푸는 방식이 그렇게 어렵진 않았다...... 다만 백준알고리즘에서 입력받는 형식을 모른다면, 조금 버벅거릴 수 있을 것 같다. 문제를 풀이하면서 이 내용을 정리하고 싶다. 다음은 문제와 실행결과 예시이다.
출처: https://www.acmicpc.net/problem/4344
문제를 보면 알겠지만, 그렇게 어려울 것 같은 문제는 아니다. 그러나 예제 입력을 보면 한 줄에 입력되는 것 같아 어려워 보인다...... 이는 풀이 과정에서 더 자세하게 다룰 것이다.
2. 문제 풀이
문제는 그렇게 어렵지 않다. 일단 첫째 줄에서 입력을 받은 만큼 for문을 활용해 반복하고, 계산하여, 출려하기만 하면 된다. 소수점과 같은 부분이 껄끄러울 수 있으나, 이건 구글링과 연습을 통해 충분히 해결할 수 있는 문제이다. 이 문제에서 내가 말하고 싶은 것은 입력예시를 해석하는 방법이다. 다음은 백준알고리즘에서 제시한 입력 예시이다. 한 줄을 입력하는 것으로 가정하겠다.
5
5 50 50 70 80 100
마치 한 줄로 입력을 받아야만 하는 것 같다. 그리고 출력 또한 한꺼번에 모아서 출력해야 할 것 같기도 하다. 실제로 나도 이런 문제 때문에 python에 split을 활용해서 문제를 풀기도 하였다. 그러나 다음과 같이 입력받아도, 백준 알고리즘 체점에는 문제가 없다.
5
5
50
50
70
80
100
그리고 출력 또한 몰아서 할 필요 없이, 각 경우마다 출력해도 옳은 답으로 간주 된다. 다음은 이런부분을 고려해서 작성한 나의 코드이다. 계산은 간단하기에, 설명하지 않겠다.
#include <stdio.h>
#include <stdlib.h>
#define SIZE 1000
int main(void) {
int input;
scanf("%d", &input);
for (int i = 0; i < input; i++) {
int num;
int score[SIZE];
scanf("%d", &num);
int sum = 0;
for (int i = 0; i < num; i++) {
scanf("%d", &score[i]);
sum = sum + score[i];
}
float average = sum / num;
int count = 0;
for (int i = 0; i < num; i++) {
if (score[i] > average)
count++;
}
float result = count * 100.0 / num;
printf("%.3lf%c\n", result,'%');
}
}
3. 결어
마지막에 서식 지정자에 대한 설명을 하고 싶었지만, 이는 다른 페이지에 따로 설명할 것이다.
'programming > 알고리즘 풀이' 카테고리의 다른 글
[백준 알고리즘] 1065번 - 한수 (0) | 2020.06.21 |
---|---|
[백준 알고리즘] 4673번 - 셀프 넘버 (qsort()의 사용) (0) | 2020.06.20 |
[백준 알고리즘] 8958번 OX퀴즈 (0) | 2020.06.19 |
[백준 알고리즘] 10996번 - 별 찍기 21 (0) | 2020.06.19 |
[백준 알고리즘] 별찍기-13, 별찍기-9 (2523, 2446) (0) | 2020.06.19 |