정화 코딩
C++과 친해지기 본문
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 |