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

더보기
void p2587()
{
/*
입력
- 5개의 자연수
출력
- 첫 번째 줄: 평균
- 두 번째 줄: 중앙 값
*/
int avg = 0;
vector<unsigned int> nums;
for (int i = 0; i < 5; i++)
{
unsigned int tmp = 1;
cin >> tmp;
avg += tmp;
nums.push_back(tmp);
}
avg /= 5;
sort(nums.begin(), nums.end());
cout << avg << "\n";
cout << nums[2];
}
25305
https://www.acmicpc.net/problem/25305

더보기
void p25305()
{
/*
입력 : N (1<= N <= 1,000)
k: 상 받는 사람
x: 점수들
*/
int N, k;
vector<unsigned int> scores;
cin >> N >> k;
for (int i = 0; i < N; i++)
{
int tmp = 0;
cin >> tmp;
scores.push_back(tmp);
}
sort(scores.begin(), scores.end());
cout << scores[N - (k - 1) - 1];
}
2751
https://www.acmicpc.net/problem/2751

더보기
void p2751()
{
// 입력
// 1 <= N <= 10^7 -> 시간 복잡도 고려
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
vector<int> a(N);
for (int i = 0; i < N; ++i)
cin >> a[i];
sort(a.begin(), a.end());
for (int i = 0; i < N; i++)
{
cout << a[i] << "\n";
}
}
10989
https://www.acmicpc.net/problem/10989

더보기
void p10989()
{
// counting sort로 정렬을 해야 메모리 초과가 나지 않음.
// 입력받는 수는 많지만, 그 숫자의 크기는 작음.
//
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
// 값의 범위가 1..10000이므로 10001 크기의 카운트 배열
static int cnt[10001] = {0};
for (int i = 0; i < N; ++i) {
int x;
cin >> x;
++cnt[x]; // 입력 받은 숫자: index, data는 그 숫자의 갯수
}
// 출력: 각 값 i를 cnt[i]번 출력
for (int i = 1; i <= 10000; ++i) {
while (cnt[i]--) {
cout << i << '\n'; // 숫자가 나온 만큼 출력해주면 자동적으로 정렬이 됨.
}
}
}
1427
https://www.acmicpc.net/problem/1427

일반적인 정렬로 풀 경우, 메모리 초과가 발생 -> Counting sort를 이용해 메모리 사용을 줄임
더보기
void p1427()
{
// Use Insertion sort
ios::sync_with_stdio(false);
cin.tie(nullptr);
int x;
cin >> x;
string num = to_string(x);
for(int i=1; i<num.size(); ++i)
{
int key = num[i];
int j = i-1;
while(j>=0 && num[j] <key)
{
num[j+1] = num[j];
--j;
}
num[j+1] = key;
}
for(auto it : num) cout << it;
}
11650
https://www.acmicpc.net/problem/11650

더보기
void p11650()
{
/*
x,y 서로 증가하는 순으로
*/
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<pair<int, int>> pos(n);
for (int i = 0; i < n; ++i)
{
int x, y;
cin >> x >> y;
pos[i] = {x, y};
}
sort(pos.begin(), pos.end()); // x가 증가하는 순서
for (auto it : pos)
{
cout << it.first << " " << it.second << "\n";
}
}
11651
https://www.acmicpc.net/problem/11651

&를 사용해 원본을 swap, &를 붙이지 않고 swap하게 될 경우 복사본이 swap되어 출력이 제대로 안됨.
더보기
void p11651()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<pair<int, int>> pos(n);
for (int i = 0; i < n; ++i)
{
int x, y;
cin >> x >> y;
pos[i] = {x, y}; // 방법 2
// y,x로 저장한 후, sort를 사용해 정렬한 다음 출력 시, it.second, it.first를 해줘도 결과는 같음.
}
for (auto &it : pos)
{
swap(it.first, it.second); // 스왑이 안됐음.
}
sort(pos.begin(),pos.end());
for(auto &it: pos)
{
cout << it.second << " " <<it.first << '\n';
}
}
1181
https://www.acmicpc.net/problem/1181

1. map을 사용해서 중복된 단어 제거 + 알파벳 순으로 정렬 => map 자료구조는 자동적으로 키를 정렬함.
2. vector에 pair 형태로 저장
3. sort로 길이 정렬 후, 출력
더보기
void p1181()
{
/*
정렬
- 길이가 짧은 순
- 길이 동일 -> 알파벳 순(사전 순)
*/
int n;
cin >> n;
map<string, int> words;
for(int i=0; i<n; ++i)
{
string s;
cin >> s;
words.emplace(s, s.size());
}
vector<pair<int,string>> a;
for(auto &it : words)
{
a.push_back({it.second, it.first});
}
sort(a.begin(),a.end());
for(auto &it : a)
{
cout << it.second << "\n";
}
}
더 깔끔한 풀이
- sort안에 람다 함수를 통해 길이 순으로 먼저 정렬
- 정렬되면, 같은 문자는 서로 인접해서 정렬됨.
- v.erase(unique(v.begin(),v.end(),v.end)를 통해 중복 원소들을 끝으로 몰고, 삭제
더보기
void p1181ClearVer()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<string> v;
v.reserve(n);
for (int i = 0; i < n; ++i) {
string s;
cin >> s;
v.push_back(s);
}
// 길이 → 사전순
sort(v.begin(), v.end(), [](const string& a, const string& b){
if (a.size() != b.size()) return a.size() < b.size();
return a < b;
});
// 중복 제거 (정렬되어 있으니 인접 중복만 지우면 됨)
v.erase(unique(v.begin(), v.end()), v.end());
for (auto& s : v) cout << s << '\n';
}
'코딩 테스트 > C++' 카테고리의 다른 글
| 프로그래머스, C++) Lv 2. 구명 보트 (0) | 2025.10.19 |
|---|---|
| 프로그래머스, C++) Lv 2. 짝지어 제거하기 (0) | 2025.10.17 |
| 백준, C++) 1018, 1436, 2839 (0) | 2025.10.05 |
| 백준, C++) 2798, 2231, 19532 (0) | 2025.10.01 |
| 입출력 시간 초과 해결 (0) | 2025.09.16 |