728x90
반응형
https://www.acmicpc.net/problem/10867
문제
N개의 정수가 주어진다. 이때, N개의 정수를 오름차순으로 정렬하는 프로그램을 작성하시오. 같은 정수는 한 번만 출력한다.
입력
첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다.
출력
첫째 줄에 수를 오름차순으로 정렬한 결과를 출력한다. 이때, 같은 수는 한 번만 출력한다.
입력하는 수들에 대해서 정렬을 하는 문제인데 조건이 붙는다. ( * 같은 정수는 한 번만 출력한다.)
처음에는 절댓값이 1000보다 작거나 같은 정수라는 표현을 못보고 visited배열을 선언해서 해결하려했다.
하지만 이렇게 배열을 통해 이런 문제를 해결하려하면 음수가 나왔을 때 런타임 에러가 뜬다(Out of Bounds)
그래서 C++이 제공하는 STL중 map을 사용해서 해결했다.
map을 사용하게 되면 선언하는 자료형의 범위에 대해서 모두 확인이 가능하기 때문에 이런 음수를 확인하거나 찾는 문제들에 한해서는 매우 유용하게 쓰일 수 있다.
아래는 코드이니 코드를 보고 꼭 이해하시길 바랍니당.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <cmath>
#define INF 9876543210
using namespace std;
// BOJ :: https://www.acmicpc.net/problem/16986
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int N; cin >> N;
map<int, int> m;
queue<int> q;
for (int i = 0; i < N; i++) {
int x; cin >> x;
if (m.find(x) == m.end()) {
m.insert({ x, x });
q.push(x);
}
}
vector<int> Answer;
while (!q.empty()) {
int Data = q.front();
q.pop();
Answer.push_back(Data);
}
sort(Answer.begin(), Answer.end());
for (int i = 0; i < Answer.size(); i++) cout << Answer[i] << " ";
return 0;
}
728x90
반응형
'BOJ > 정렬' 카테고리의 다른 글
[C/C++] 백준 - 효정과 새 모니터 (0) | 2022.08.12 |
---|---|
[C/C++] 백준 - 11536번 : 줄 세우기 (0) | 2022.05.14 |
[C/C++] 백준 - 2170번 : 선 긋기 (0) | 2021.08.02 |
[C/C++] 백준 - 8979번 : 올림픽 (0) | 2021.08.01 |
[C/C++] 백준 - 2910번 : 빈도 정렬 (0) | 2021.07.31 |