본문 바로가기

백준/C++

[C++] 백준 1427번 소트인사이드

728x90

이번에 알고리즘을 공부하기 위해 백준을 풀면서 블로그에 정리해보려고 한다ㅎㅎ

정렬부터 시작하려고 하는데, 일단 실버 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)를 이용해 정렬해주었고, 숫자를 문자열로 받아서 자릿수를 처리하였다.

 

난 무작정 반복문을 사용하였는데... 역시... 다른 방법을 찾아보기를 잘한 것 같다.

728x90

'백준 > 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