[알고리즘]/[CodeUp][CodeTree]

[codetree] 프로그래밍 연습 _정렬된 숫자 위치 알아내기 C++

우당탕탕 개발 일지 2025. 1. 29. 00:16

안녕하세요. 우당탕탕 개발일지 입니다. 꾸준히 문제 풀기 다시 시작해보겠습니다. 

codetree가 마음에 들어 순서대로 풀 것 같습니다. 아자아자 화이팅!

 

 

생각과 다르게 오래 고민하였습니다. 틀리게 생각한 부분부터 어디가 틀렸는지 꼼꼼히 적어두겠습니다!

 

 

<정렬된 숫자 위치 알아내기 >

🤔가장 처음 든 생각) 처음 위치를 저장할 배열이 필요하겠다.

 

틀린 생각 ) "한 개의 클래스 배열에는 원래  입력을 담고 다른 하나의 클래스 배열에는 정렬된 걸 담아야겠다. "✖️

=> 틀린 이유) 그럼 중복된 것 중에 먼저 입력된 것을 구별하여 출력할 수가 없음.🪄

//틀린코드

#include <iostream>
#include<algorithm>

using namespace std;


class sortc
{
    public: 
        int num,order;

    sortc(int num, int order)
    {
        this -> num =num;
        this -> order =order;

    }
    sortc(){}
};

bool cmp(sortc a, sortc b)
{
    if(a.num==b.num)
    {
        return a.order<b.order;
    }
    else {
        return a.num<b.num;
    }
}

int main()
{

    int n;
    cin>>n;

    sortc crr[1000]; // 숫자정렬
    sortc arr[1000];//기존 숫자 
     int num,order;
     //입력
    for(int i=0; i<n; i++)
    {
       
        cin>>num;

        order=i+1;

        crr[i]=sortc(num,order);
        arr[i]=sortc(num,order);
    }

    //번호 부여 
    sort(crr,crr+n,cmp);

    for(int i=0; i<n; i++)
    {
        arr[i]=i+1;
       
    }


    //출력
    for(int j=0; j<n; j++)
    {   
        cout<<arr[j]<<" ";
        
        for(int i=0; i<n; i++)
        {   
          
            if(arr[j].num==crr[i].num)
            {
                cout<<crr[j].order<<" ";
            }
        }
       
    }
        
    
    return 0;
}

 

 

 

//정답 코드)

-cmp함수 수정된 부분 없음 

-클래스 배열 1개와 정수 배열 1개 사용

-정렬후 crr을 이용해 arr 정의=> arr 출력 

#include <iostream>
#include<algorithm>

using namespace std;


class sortc
{
    public: 
        int num,order;

    sortc(int num, int order)
    {
        this -> num =num;
        this -> order =order;

    }
    sortc(){}
};

bool cmp(sortc a, sortc b)
{
    if(a.num==b.num)
    {
        return a.order<b.order;
    }
    else {
        return a.num<b.num;
    }
}

int main()
{

    int n;
    cin>>n;

    sortc crr[1000]; // 숫자정렬
    int arr[1000];
     int num,order;
     //입력
    for(int i=0; i<n; i++)
    {
       
        cin>>num;

       

        crr[i]=sortc(num,i);
       
    }

    //번호 부여 
    sort(crr,crr+n,cmp);

    for(int i=0; i<n; i++)
    {
        arr[crr[i].order]=i+1;
       
    }


    //출력
    for(int j=0; j<n; j++)
    {   
        cout<<arr[j]<<" ";
       
    }
        
    
    return 0;
}
728x90