반응형
안녕하세요. BlockDMask 입니다.
오늘은 역원소 정렬이라는 문제를 풀어봤습니다.
0. 제목
백준 5648 역원소 정렬
BOJ 5648 역원소 정렬
reverse and sort
1. 문제 설명
모든 원소가 양의 정수인 집합이 있을 때,
원소를 거꾸로 뒤집고 그 원소를 오름차순으로 정렬하는 프로그램을 작성하세요.
단, 원소를 뒤집었을 때 0이 앞에 선행되는 경우는 0을 생략해야 합니다.입력
첫 번째로 입력되는건 n (1<=10^6 <= n)으로 사용자가 뒤이어 입력할 원소 값을 결정합니다.
입력하는 줄에는 하나의 원소값 뿐만 아니라 여러 원소 값도 들어갈 수 있습니다.
단, 입력하는 정수는 10^12를 넘어서는 안 됩니다.출력
오른차순으로 정렬한 원소를 한줄에 하나씩 출력합니다.
초록 부분이 입력
아래 흰 부분이 출력 입니다.
2. 풀이 과정
숫자를 받아서 vector v에 넣습니다.
넣은 숫자를 문자열 타입으로 바꿔주고 STL reverse를 이용하여 문자열을 역으로 돌려줍니다.
돌린 문자열을 다시 숫자 type으로(atoll) 바꿔준 후 vector rv에 넣습니다.
vector rv를 STL sort를 이용하여 오름차순으로 정렬한 후 출력해줍니다.
STL의 vector, sort, atoll, reverse를 이용하여 풀었습니다.
3. 소스 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | //https://www.acmicpc.net/problem/5648 //BOJ_5648_reverse_and_sort #include<iostream> #include<cstdio> #include<vector> #include<cstring> #include<string> #include<algorithm> using namespace std; class element{ private: vector<long long> v; //original 숫자들을 위한 vector vector<long long> rv; //reverse 숫자들을 위한 vector int n; public: void setElement(); //vector v에 숫자를 받습니다. void callReverse(); //vector v의 element 를 하나씩 reverse 함수의 파라미터로 넘기고 // vector rv의 sort 까지해준다. long long rElement(long long &num); // 파라미터로 들어온 숫자를 역으로 바꾸어서 return. void printRV() const; //vector rv의 element 출력. }; void element::setElement(){ scanf("%d", &n); for(int i=0; i<n; i++){ long long num; scanf("%lld", &num); v.push_back(num); } } void element::callReverse(){ for(int i=0; i<n; i++){ rv.push_back(rElement(v[i])); //original의 element를 rElement에서 역으로 바꾼 후 rv에 삽입 } sort(rv.begin(), rv.end()); //오름차순으로 정렬 } long long element::rElement(long long &num){ if(num == 0) return 0; //예외처리 string s=to_string(num); //original 숫자를 문자열로 만들어줍니다. reverse(s.begin(), s.end()); //string을 거꾸로 바꾸어 줍니다. (STL) return atoll(s.c_str()); //string -> long long 로 바꾸어서 push_back } void element::printRV() const{ for(int i=0; i<n; i++){ printf("%lld\n", rv[i]); } } int main(void){ element e; e.setElement(); e.callReverse(); e.printRV(); return 0; } | cs |
4. 인증
문제출처 - https://www.acmicpc.net/problem/5648
감사합니다.
반응형
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[백준 1463] 1로 만들기 (DP) (2) | 2017.12.12 |
---|---|
[Level 1] 약수의 합 (C언어 약수구하기) (0) | 2017.12.12 |
[백준 2748] 피보나치 수2 (0) | 2017.12.05 |
[백준 1924] 2007년 (0) | 2017.12.04 |
[백준 1212] 8진수 2진수 (1) | 2017.11.28 |
[백준 2447] 별찍기10 (1) | 2017.11.22 |
[백준 2446] 별찍기9 (0) | 2017.11.21 |
[백준 10820] 문자열 분석 (0) | 2017.11.21 |