백준 저지의 문제 풀이 과정을 공유드린다.
문제 출처

1. 문제설명


  • 삼각형의 형태를 나타내는 출력하는 비교적 쉬운문제
    • Equilateral : 세 변의 길이가 모두 같은 경우
    • Isosceles : 두 변의 길이만 같은 경우
    • Scalene : 세 변의 길이가 모두 다른 경우
    • Invalid : 삼각형 조건이 안될 경우



2. 알고리즘 설계


  • 값을 벡터에 입력받는다.
    • 무적권 3개를 입력받으니 크기할당 가능
  vector<int> v(3)
  
  • 커스텀 sort 구현
    • greater<>, less<>도 있지만, 커스텀에 익숙해지려고 노력중..
  bool compare(int n1, int n2) {
	if (n1 < n2)
		return true;
	return false;
  }

  sort(v.begin(), v.end(), compare);
  



3. 로직


  • 로직…이라 하긴 뭐하고, 코드를 줄이는데 노력한 결과..
  • 각각을 if, else if로 처리했는데 더 줄이는 방법이 있을 거 같다.


  • 전체 코드
#include <iostream>
#include <algorithm>
#include <vector>
#define ELIF else if
using namespace std;


bool compare(int n1, int n2) {
	if (n1 < n2)
		return true;
	return false;
}

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	while (true) {
		vector<int> v(3);
		cin >> v[0] >> v[1] >> v[2];

		if (v[0] == v[1] && v[1] == v[2] && v[0] == 0)
			break;

		sort(v.begin(), v.end(), compare);

		if (v[0] + v[1] <= v[2]) cout << "Invalid";
		ELIF(v[0] == v[1] && v[1] == v[2]) cout << "Equilateral";
		ELIF(v[0] == v[1] || v[1] == v[2] || v[0] == v[2]) cout << "Isosceles";
		else cout << "Scalene";

		cout << '\n';
	}

	return 0;
}


  • 참고
    • operator custom
  #include <queue>
  using namespace std;

  struct Compare {
    bool operator()(int a, int b) {
      if(a < b)
        return true;
      return false;
    }
  }

  priority_queue<int, vector<int>, Compare> pq