일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스코딩테스트
- 프로그래머스
- 그리디알고리즘
- 백준
- 그리디
- C
- 논문리뷰
- 브루트포스알고리즘
- MySQL
- 자료구조
- 문자열
- 백준알고리즘
- Image Classification
- SQL
- 수학
- 정수론
- 사칙연산
- 다이나믹프로그래밍
- 정렬
- 이진탐색
- C++
- 해시를사용한집합과맵
- 프로그래머스연습문제
- C언어
- 이분탐색
- 논문구현
- 큐
- 프로그래머스sql
- 소수판정
- 구현
- Today
- Total
초보 개발자의 이야기, 릿허브
[C++] 프로그래머스 정수 내림차순으로 배치하기 본문
1. 문제이해
https://programmers.co.kr/learn/courses/30/lessons/12933
코딩테스트 연습 - 정수 내림차순으로 배치하기
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 제한 조건 n은 1이
programmers.co.kr
정수 n의 각 자릿수를 내림차순으로 정렬한 새로운 정수를 리턴하는 것이 목표이다.
2. 문제풀이
문제 자체는 간단하다.
정수 n의 각 자릿수를 내림차순으로 정렬 후 반환하는 것이 목표이다.
입출력 예의 118372 에서 볼수 있듯이,
각 자릿수를 내림차순으로 정렬한 정수 873211을 반환하면 된다.
필자는 3가지 단계에 걸쳐 코드를 구현했다.
1. 정수의 각 자릿수를 배열에 저장
2. 배열에 담긴 정수를 정렬
3. 정렬된 값들을 가지고 최종적으로 반환할 정수를 만들기
자세한 설명은 아래 코드와 함께 보도록 하자.
주어진 코드는 다음과 같았다.
3. 소스코드
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
long long solution(long long n) {
long long answer = 0; // 최종적으로 반환할 정수
long long arr[10]; // 정수의 각 자릿수를 저장할 배열
int size = 0; // 정수의 길이
int i = 0;
// 1. 정수의 각 자릿수를 배열에 저장
for (int i = 0;; i++) {
if (n < 1) { // 마지막 자릿수까지 모두 저장한 경우
break;
}
else {
arr[i] = n % 10;
n /= 10;
}
size++;
}
// 2. 배열에 담긴 정수를 정렬
// (for문에서의 계산을 용이하게 하기 위해 오름차순으로 정렬)
sort(arr, arr + size);
// 3. 정렬된 값들을 가지고 최종적으로 반환할 정수를 만들기
for (int j = size; j >= 1; j--) {
answer += arr[j - 1] * pow(10, j - 1);
}
return answer;
}
먼저 위와 같이 변수들을 설정해 준 뒤,
매개변수로 들어온 정수 n의 각 자릿수를 분해해 배열(arr)에 저장해준다.
이때, 정수의 길이(자릿수)를 따로 size 변수를 통해 카운트 해주었다.
배열에 저장된 자릿수들을 sort 함수를 통해 정렬한 뒤,
(필자는 아래 for문에서의 계산을 용이하게 하기 위해 오름차순으로 정렬)
마지막으로 정렬된 값들을 가지고 최종적으로 반환할 변수를 만들어주었다.
위의 예제 입력인 118372를 이에 적용시켜보면,
과정 1을 통해 정수의 각 자릿수가 배열에 저장된다.
(arr[0] = 1, arr[1] = 1, arr[2] = 8, arr[3] = 3, arr[4] = 7, arr[5] = 2)
과정 2를 통해 배열에 담긴 정수를 정렬되고,
(arr[0] = 1, arr[1] = 1, arr[2] = 2, arr[3] = 3, arr[4] = 7, arr[5] = 8)
과정 3을 통해 정렬된 값들을 가지고 최종적으로 반환할 정수를 만들게 된다.
(arr[5] x 10^5 = 8 x 100000 = 800000
arr[4] x 10^4 = 7 x 10000 = 70000
arr[3] x 10^3 = 3 x 1000 = 3000
arr[2] x 10^2 = 2 x 100 = 200
arr[1] x 10^1 = 1 x 10 = 10
arr[0] x 10^0 = 1 x 1 = 1)
다른 분들의 코드를 보니까 3줄로 끝나는 분도 계시더라..😱
보다 짧고 간결한 코드를 짜신 분들을 보니
오늘도 새삼 대단한 분들이 많구나..라는 생각과 함께 더 노력해야겠다는 생각이 들었다.😤
'코딩테스트 > 📘 프로그래머스 (programmers)' 카테고리의 다른 글
[C++] 프로그래머스 부족한 금액 계산하기 (0) | 2021.09.22 |
---|---|
[C++] 프로그래머스 이상한 문자 만들기 (0) | 2021.09.19 |
[C++] 프로그래머스 정수 제곱근 판별 (0) | 2021.09.17 |
[C++] 프로그래머스 피보나치 수 (0) | 2021.09.14 |
[C++] 프로그래머스 JadenCase 문자열 만들기 (0) | 2021.09.14 |