문제풀이
일차 배열로도 풀 수 있는 문제이지만, 문제 카테고리에 맞게 구조체를 이용하여 풀었다.
즉, 구조체 + 벡터 + 정렬을 통해 풀었다. 이 조합은 알고리즘 문제에서 종종 볼 수 있는 조합이고 단골 문제 풀이법이다.
우선 gas라는 구조체를 만들고 이를 사용하는 벡터를 만듦. 그럼 이 벡터는 gas라는 구조체를 사용하는 벡터가 됨.
struct gas{
int x;
int y;
};
vector<gas> v;
입력 부분은 생략하고 정렬하는 부분을 살펴 보도록 하겠음.
bool cmp(gas A, gas B)
{
if (A.x<B.x)
{
return true;
}
return false;
}
sort(v.begin(), v.end(), cmp);
bool cmp를 설정하고 이는 결국 sort 함수에서 비교하는 조건으로 사용됨.
bool cmp는 gas A와 gas B를 입력 받아 if (A.x<B.x)인 경우 true를 리턴한다. 이 의미는 A.x와 B.x를 비교하여 A.x가 B.x보다 작다면 우선하여 정렬한다는 의미임. 따라서 값이 작으면 앞으로 오게 됨(=오름차순).
이러면 gas A의 첫 번째 인자(식별 번호)로 비교하여 순서가 정렬됨.
소스코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct gas{
int x;
int y;
};
int n;
vector<gas> v;
bool cmp(gas A, gas B)
{
if (A.x<B.x)
{
return true;
}
return false;
}
int main()
{
cin>>n;
gas a;
for (int i=0; i<n; i++)
{
cin>>a.x>>a.y;
v.push_back({a.x,a.y});
}
sort(v.begin(), v.end(), cmp);
for (int i=0; i<n; i++)
{
cout<<v[i].x<<" "<<v[i].y<<endl;
}
return 0;
}
'C C++ > C C++ 알고리즘 문제 기타' 카테고리의 다른 글
[C/C++] 코드업 1928 : (재귀함수) 우박수 (3n+1) (basic) (0) | 2022.10.09 |
---|---|
[C/C++] 코드업 1920 : (재귀함수) 2진수 변환 (0) | 2022.10.08 |
[C/C++] 코드업 1916 : (재귀함수) 피보나치 수열 (Large) (0) | 2022.10.08 |
[C/C++] 코드업 1915 : (재귀함수) 피보나치 수열 (0) | 2022.10.08 |
[C/C++] 코드업 1904 : (재귀함수) 두 수 사이의 홀수 출력하기 (0) | 2022.10.04 |
댓글