본문 바로가기

Algorithm

[백준] 1546번 : 평균 - C/C++

728x90

 

 

문제 풀이 순서는 아래와 같다.

1. 시험 본 과목의 수 N 입력 받기

2. 배열에 넣기

3. 새로운 평균을 통해 성적 구하기

 

점수를 1차원 배열에 넣을 건데,

오늘은 계속해서 유용하게 쓰일 만한 팁을 소개하고자 한다.

 

바로 const 로 선언해주기

const int NMAX = 1000;

문제에서 과목의 개수가 1000 개가 넘어가지 않도록 지정했기 때문에

const 형태로 선언해주면,

 

배열은 아래처럼 써줄 수 있다.

int ary[NMAX];

 

그냥 아래처럼 쓰면 안 되나요?

int ary[1000];

 

상관은 없다.

내가 들었던 강의에서는

나중에.. 더 어려운 문제를 풀게 되면

제시한 수의 범위를 넘어서는 것을 방지하기 위해

const로 선언한다고 하긴 했다.

 

코드 스타일은 사람마다 다르니

참고만 해도 좋다.

 

1차원 배열에 값을 입력 받았다면,

최고값을 찾자.

최고값을 찾고 총점도 한번에 계산 가능하다.

for(int i=0;i<n;i++){
   if(ary[i]>max){
     max = ary[i];
    }
  sum = sum + ary[i];
}

 

 

벌써 문제 풀이의 마지막 단계이다.

새로운 평균 = 총합 * 100 / 최고점수 / 과목의 수 를 계산해주자.

주의해야할 점이 존재한다.

 

문제의 예제 출력을 보면 소수점까지 표시되어있다.

int 형으로 평균을 구하면 안 된다는 말.

그럼 어떤 걸로 써야할까.

당연 double 타입이다.

double avg = sum * 100.0 / max / n;

 

이렇게 하면 문제에서 요구하는 출력값이 나온다.

 

 

 

 

전체코드

#include <iostream>

//평균
using namespace std;

const int NMAX = 1000;

int main(){
    int n;
    int ary[NMAX];
    cin >> n;

    for(int i = 0; i < n; i++){
        cin >> ary[i];
    }

    long sum = 0, max = 0;

    for(int i = 0; i < n; i++){
        if(ary[i] > max){
            max = ary[i];
        }
        sum = sum + ary[i];
    }

    double avg = sum * 100.0 / max / n;
    cout << avg << '\n';
}

 

전체코드는 위에 처럼 작성했다.

코드를 실행하고 예제 입출력을 확인했다만,,

 

이건 소수점까지 잘 나오는데

 

이건 안 나온다

 

다른 예제 다 해봤고 하나 제외하고 전부 성공이라

제출하긴 했다.

맞았다.

근데 찜찜하다.

 

예전에도 이런 비슷한 상황이 있었던 것 같은데

그때도 성공은 했다.

맞았으면 됐지..

 

 

 

 

더 좋은 풀이가 있다면 댓글로 알려주세요 !!

피드백 환영입니다☺️

728x90