본문 바로가기

programming/알고리즘 풀이

[백준 알고리즘] 4344번 - 평균은 넘겠지 (백준 알고리즘 예제 입력 가이드)

반응형

1. 문제, 실행결과 예시

 

 이번 문제는 푸는 방식이 그렇게 어렵진 않았다...... 다만 백준알고리즘에서 입력받는 형식을 모른다면, 조금 버벅거릴 수 있을 것 같다. 문제를 풀이하면서 이 내용을 정리하고 싶다. 다음은 문제와 실행결과 예시이다.

 

출처: https://www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 입력 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 �

www.acmicpc.net


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. 결어

 

 마지막에 서식 지정자에 대한 설명을 하고 싶었지만, 이는 다른 페이지에 따로 설명할 것이다.

반응형