본문 바로가기
C C++/C C++ 알고리즘 문제 기타

[C/C++] 코드업 1805 : 입체기동장치 생산공장

by Go! Jake 2022. 10. 8.

문제풀이

일차 배열로도 풀 수 있는 문제이지만, 문제 카테고리에 맞게 구조체를 이용하여 풀었다.

즉, 구조체 + 벡터 + 정렬을 통해 풀었다. 이 조합은 알고리즘 문제에서 종종 볼 수 있는 조합이고 단골 문제 풀이법이다.

 

우선 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;
}

댓글