안녕하세요. 우당탕탕 개발일지 입니다. 꾸준히 문제 풀기 다시 시작해보겠습니다.
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
'[알고리즘] > [CodeUp][CodeTree]' 카테고리의 다른 글
[codetree] 프로그래밍 연습 _시뮬레이션2_최장 연속 부분 수열 (0) | 2025.03.27 |
---|---|
[codetree] 프로그래밍 연습 _시뮬레이션1_ 구간 칠하기 C++ (4) | 2025.02.15 |
[codetree] 프로그래밍 연습 _재귀함수 (2) | 2024.12.11 |
[codetree] 프로그래밍 연습_변수의 영역 (3) | 2024.11.14 |
[codetree] 프로그래밍 연습_ call by value/ call by reference (메모리 초과 해결) (1) | 2024.11.12 |