정화 코딩

C++과 친해지기 본문

PS

C++과 친해지기

jungh150c 2024. 4. 10. 00:11

4/9. 통계학 (백준 2108번)

 

https://www.acmicpc.net/problem/2108

 

//C++

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n, sum = 0;
    cin >> n;

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

    sort(data.begin(), data.end());

    int maxCnt = 0;
    vector<int> cnt(8001, 0);
    for (int x: data) {
        cnt[x + 4000]++;
        if (maxCnt < cnt[x + 4000]) {
            maxCnt = cnt[x + 4000];
        }
    }

    int tmp = 0, mode;
    for (int i = 0; i < 8001; i++) {
        if (cnt[i] == maxCnt) {
            tmp++;
            mode = i - 4000;
            if (tmp == 2) {
                mode = i - 4000;
                break;
            }
        }
    }

    int min = data[0];
    int max = data[n - 1];
    int mid = data[n / 2];
    int avg = round(float(sum) / n);

    cout << avg << '\n' << mid << '\n' << mode
         << '\n' << (max - min) << '\n';
}

처음에 정수가 음수일 수 있다는 것을 생각하지 못하고 cnt 벡터 크기를 4001로 잡아서 틀렸다. (오답) cnt 벡터의 크기를 8001로 늘리고, -4000은 cnt[0]에, 0은 cnt[4000]에, 4000은 cnt[8000]에 저장되도록 수정해주었다. (정답)

 

C++에서의 빠른 입출력

ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);

 

<bits/stdc++.h>

자주 사용되는 여러 헤더 파일을 한꺼번에 불러올 수 있는 구문.

간단해서 문제 풀거나 대회에서 자주 사용되는 것 같으나, 불필요한 헤더 파일까지 컴파일되므로 시간과 공간이 낭비될 수 있음.

 

배열과 벡터의 차이점

배열: malloc으로 동적할당을 하거나 아예 최댓값으로 global로 선언해주어야 함. (local로 하면 스택이 터질수도.. 있다고 한다.)

벡터: 크기가 유동적으로 변할 수 있음. 필요한 만큼 선언 후, 그 이상으로 필요하면 push_back()을 통해 넣어줄 수 있음. 벡터의 포인터라고 볼 수 있는 iterator를 통해 접근함.

v[idx]: v의 idx번째 위치의 데이터 참조. 배열과 비슷한 사용.
v.begin(): 첫 번째 데이터를 가리킴. 포인터와 비슷한 iterator.
v.end(): 마지막 데이터의 다음을 가리킴. 포인터와 비슷한 iterator.

 

exit code: -1073740940

cout 후 cout.flush();를 써줌으로써 해결했는데... 오잉 지금은 또 없어도 잘 되네??? 뭐지 이것 때문이 아니었던건가..????

 

'PS' 카테고리의 다른 글

C++과 친해지기  (0) 2024.05.12
C++과 친해지기  (0) 2024.05.04
꾸준히 문제 풀기 - 2월 말  (0) 2024.02.20
꾸준히 문제 풀기 - 1월, 2월  (1) 2024.01.15
꾸준히 문제 풀기 - 9월 4주차  (0) 2023.09.19
Comments