본문 바로가기
공부/컴퓨터

백준 1546번 평균 문제 C++

by Ur's coding world 2024. 2. 20.
반응형

 

백준 1546번 평균 문제


백준 1546번 예시답안

 

안녕하세요.  오늘은 백준 1546번 평균 문제에 대해서 포스팅 하려고합니다.

문제는 세준이가 시험을 망쳤다고 시험점수를 가지고 사기를 치는 것에서 시작하는데요. 

본인이 N개의 과목을 시험쳤을 경우 N개 중 가장 높은 점수를 만점기준으로 바꿔버려 평균점수를 내는 문제입니다.

만약 N개의 과목 중 최고점이 60점일 경우 그 과목은 60/60*100=100점인 만점으로 바뀌어 사기를 치는 문제입니다.

아무래도 세준이의 미래는 청조형인 것 같습니다. I am 만점자에요.

 

저는 이문제를 풀 당시에 C++과목을 수강하고 있었어서 C++로 아래와 같이 풀어보았습니다.

#include <iostream>
using namespace std;

int main(){
    int N;
    int H = 0;
    cin >> N;
    
    int score[N];        //과목별 점수 배열 선언
    float array[N];      //최대점H로 나누고 *100한 값을 배열 선언
    float sum = 0.0;     //위 값들의 합

    for (int i = 0; i < N; i++){
        cin >> score[i];
    }
    
    for (int i = 0; i < N; i++){    //최대점 구하기
        if (score[i] >= H){
            H = score[i];
        }
    }

    // 배열 초기화 및 값 할당해야함 -> score[]은 int로 받았고, 받은 score을 float형변환값으로 배열
    for (int i = 0; i < N; i++){
        array[i] = static_cast<float>(score[i]);
    }

    // 0으로 나눴을 때 대비
    if (H != 0) {
        for (int i = 0; i < N; i++){
            array[i] = array[i] / static_cast<float>(H) * 100; //H도 강제형변환
            sum += array[i];
        }
    }
    
    cout << sum / static_cast<float>(N);
    
    return 0;
}

백준 1546번 풀이방식

1. 먼저 변수를 선언해줍니다. 과목의 개수인 N을 선언해줍니다. 

2. N개의 과목 중 최고점수를 알기위해 변수 H를 선언해줍니다.

3. 과목의 개수를 입력받도록 해줍니다.

4. score[N]을 선언해주어 과목의 개수만큼 점수값이 배열에 저장되게 해줍니다.

5. array[N]을 선언해주어 최대값 H로 점수를 나눴을 때의 값이 배열에 저장되게 해줍니다.

*이 때 score[N]은 과목의 점수가 정수로 입력받기 때문에 int로

array[N]의 값은 H로 나눈 값들의 배열로 소수점자리가 나올 것이므로 float형으로 선언해주었습니다.

6. array[N] 배열의 값의 총합을 sum이라는 int형 변수로 선언해주었습니다.

 

7. N번만큼 반복하는 반복문을 두어 N개의 과목의 점수를 입력받게해주었습니다.

8. 최초 H, 최대점수는 0으로 초기화된 상태입니다. N개의 과목을 한번씩 반복해주며 H값과 비교해 더 큰 수를 H에 대입해주어 N개 과목 중 가장 큰 값을 H에 대입시키도록 반복문을 만들어주었습니다.

 

9. score[n]이 int형이므로 강제형변환 시켜주는 static_cast<float>로 float형으로 변환된 값을 array[i]에 대입시켜줍니다.

10. H가 0이면 나눌 수 없으므로, 0이 아닐 때를 조건문으로 걸어주고, N번만큼 반복하여 과목당 점수/최대값*100의 값을 score[i]값에 대입해줍니다. 대입된 array[i]값들을 N번만큼 반복하여 이전값과 더해 총합을 구합니다.

 

11. 총합 / 과목수로 평균을 구해주고 이를 출력합니다.

 

백준 1546번 채점결과

 

1학년 과목으로 처음 C++을 배웠어서 C++로 백준문제를 풀어보았습니다. 

다른 언어를 배우면 또 다시 풀어봐야겠네요.

이것으로 백준 1546번 문제풀이 포스팅을 마치도록 하겠습니다. 감사합니다.

 

반응형