이번에 알고리즘을 공부하기 위해 백준을 풀면서 블로그에 정리해보려고 한다ㅎㅎ
정렬부터 시작하려고 하는데, 일단 실버 5문제를 골라보았다.
문제
https://www.acmicpc.net/problem/1427
1427번: 소트인사이드
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
배열에 수들을 입력받고, 맨 앞에부터 시작하여 순서대로 뒷 숫자랑 비교하면 될 것 같다. 내림차순이니까 앞의 숫자가 비교하는 뒤에 있는 숫자보다 작으면 둘이 위치를 변경해 줄 것이다.
그런데... 예제에 공백이 없다...
그러면 숫자를 하나씩 잘라서 배열에 넣어줘야한다.
오호~ 여기에 여러 input방법에 대해 정리되어 있군 ㅎㅎ(감사)
https://dbstndi6316.tistory.com/33
이걸 이용해야겠다!
처음에 돌려보니 결과가 붙어서 나오는 게 아니라 떨어져 나왔다...
잘 보니 cout << temp [i] << endl; 로 작성해 버렸다;;
나의 실수 ☆
다시 다시 작성!!!
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> temp;
int b;
int main() {
string a;
cin >> a;
for (int i = 0; i < a.size(); i++) {
temp.push_back(a[i] - '0');
}
for (int i = 0; i < a.size()-1; i++) {
for (int j = i+1; j < a.size(); j++) {
if (temp[i] < temp[j]) {
b = temp[i];
temp[i] = temp[j];
temp[j] = b;
}
}
}
for (int i = 0; i < a.size(); i++) {
cout << temp[i];
}
return 0;
}
이렇게 하니 정답 ㅎㅎ
(여기서 string을 입력하고 출력하는 구문이 있는데 string 헤더파일을 include 해주지 않으면 '이러한 피연사자와 일치하는 ">>"연산자가 없습니다.'라는 오류 메시지가 뜨니까 주의!!)
다른 풀이도 찾아보니...
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
string a;
cin >> a;
sort(a.begin(), a.end(), greater<char>());
cout << a << endl;
return 0;
}
입력이나 출력 타입이 정해져 있지 않기 때문에 문자열로 받은 다음, sort 함수를 쓰면 기본적으로 오름차순 정렬이 되지만 greater <type>()을 마지막에 추가하게 되면 내림차순으로 정렬하게 된다고 한다.
이렇게.. 코드가 짧구나...(반성)
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool compare(char a, char b)
{
return a > b;
}
int main() {
int n;
string a;
cin >> n;
a = to_string(n);
sort(a.begin(), a.end(), compare);
cout << a << endl;
return 0;
}
또 다른 풀이는 sort에서 내림차순을 사용자 지정 함수(compare)를 이용해 정렬해주었고, 숫자를 문자열로 받아서 자릿수를 처리하였다.
난 무작정 반복문을 사용하였는데... 역시... 다른 방법을 찾아보기를 잘한 것 같다.
'백준 > C++' 카테고리의 다른 글
[C++] 백준 2217번 로프 (2) | 2023.12.04 |
---|---|
[C++] 백준 1764번 듣보잡 (2) | 2023.12.03 |
[C++] 백준 1302번 베스트셀러 (2) | 2023.12.02 |
[C++] 백준 1181번 단어 정렬 (2) | 2023.12.01 |
[C++] 백준 1026번 보물 (2) | 2023.11.30 |