BOJ 5073번
백준 저지의 문제 풀이 과정을 공유드린다.
문제 출처
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