스터디/알고리즘 스터디

[프로그래머스-코딩테스트 연습] 정렬 - 가장 큰 수 (20.02.05)

sleesm 2020. 2. 5. 22:29

놀랍게도 아직 3문제밖에 안된 알고리즘 스터디!

 

사실 내가 안 풀어서 그렇다.

다른 사람은 더 많이 풀었던 것 같은데...

.

.

.

 

오늘 컨디션이 별로라 조금 고민했지만,

어제 패스권을 써서 양심이 너무 찔렸다 ㅎ

 

 

 


 

 

 

 

그래서 오늘의 문제는 정렬!

 

 

 

프로그래머스 코딩 테스트 연습

정렬(sort) - 가장 큰 수

 

 

 

문제 사이트 :  https://programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수 | 프로그래머스

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

programmers.co.kr

 

- 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수

  여기서 이어 붙인다는 것은 string으로 인식해서 그대로 + 해주는 것과 동일한 뜻이다.

 

- 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return

  (이때 순서 재배치가 아주 중요한데 여기서 정렬을 쓰는 것 같다.)

 

 

 

 

 


 

직접 작성해본 소스코드 및 간단한 설명

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string>
#include <vector>
using namespace std;
 
string solution(vector<int> numbers) {
    vector<int> num;
    while(/*뭘 넣어야할지 모르겠음*/){
        string tmp;
        for(int i = 0; i< numbers.size(); i++)
            tmp += itoa(numbers.at(i));
        num.push_bak(atoi(tmp)); 
    }
    int max = num.at(0);
    for(int i = 1; i< num.size(); i++){
        if(max < num.at(i))
            max = num.at(i);
    }
    string answer = itoa(max);
    return answer;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

 

사실 보면 알겠지만, 아직 미완성이다.

 

 

컨디션도 나쁘고 짧은 시간 동안 해보려고 하니 머리가 돌아가지 않는다...

마음속에서는 다른 방법도 시도해보고 있지만..

실. 패.

.

.

.

 

 

while( ) 이 조건을 어떻게 해야 할지 모르겠다는 건데

사실 반복문을 하는 것도 아닌 것 같긴 하다.

그래도 대충 쓴 코드를 설명하자면,

 

 

참고로 말하자면, 매우 간단하지만 시간이 오래 걸리는 알고리즘이므로 따라 하지 않는 것이 좋을 듯하다.

 

 

●     vector에 있는 값을 int형으로 받아 string으로 변환 ( itoa( ) 사용 )

     for문을 통해 string들을 이어 붙임

     ( 이때, 모든 경우를 다 따져야 한다. (아마 정렬을 사용. 매우 비효율적인 방법) )

     이어 붙인 것들을 int형으로 바꾼 후 그중 가장 큰 값을 return 한다.

 

 

다시 봐도 정말 비효율적이다.

 

 

아무튼 이렇게 대충 완성된 알고리즘은 일단 남겨두고

몸이 조금 괜찮아지면 다시 도전해 볼 예정 ^^

 

후에 채점까지 완료한 코드는 현 코드와 비교해서 다시 올려보도록 하겠습니다.