초보 개발자의 이야기, 릿허브

[C++] 프로그래머스 정수 내림차순으로 배치하기 본문

코딩테스트/📘 프로그래머스 (programmers)

[C++] 프로그래머스 정수 내림차순으로 배치하기

릿99 2021. 9. 18. 09:41
728x90
반응형
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줄로 끝나는 분도 계시더라..😱

보다 짧고 간결한 코드를 짜신 분들을 보니

오늘도 새삼 대단한 분들이 많구나..라는 생각과 함께 더 노력해야겠다는 생각이 들었다.😤

 

 

 

 

 

728x90
반응형