[ 문제 ]
1448번 문제보기
[ 제출코드 ]
#include <iostream>
#include <vector>
#include <algorithm>
int maxSides(std::vector<int> &sides){ // sides의 별칭
// int maxSides(std::vector<int> sides){ // sides를 복사하여 독립적인 sides가 됨.
// 세 변의 길이의 합이 최대인 삼각형 만들기
for(int i=sides.size()-1; i>1; i--){
int c = sides[i], b = sides[i-1], a = sides[i-2];
if(c < a + b) return a + b + c;
}
return -1;
}
int main(){
int N;
std::cin>>N;
std::vector<int> sides(N, 0);
// N개의 빨대 길이
for(int i=0; i<N; i++) std::cin>>sides[i];
std::sort(sides.begin(), sides.end());
std::cout<<maxSides(sides)<<'\n';
return 0;
}
[ 풀이 ]
1. 빨대 길이들을 배열에 넣고, 오름차순으로 정렬한다.
2. 세 변의 길이 합이 최댓값이 되어야 하므로 정렬된 배열 중 가장 뒤에 있는 3개를 뽑는다.
2-1. 삼각형의 결정 조건을 만족하면 3개의 합을 리턴.
2-2. 삼각형의 결정 조건을 만족하지 못하면 가장 뒤에 있는 값을 제외하고 2번을 다시 반복.
3. 배열 내에서 삼각형 결정 조건을 찾지 못했다면 -1을 리턴.
[ 이야기 ]
- 삼각형 결정 조건에 대해 다시 배웠다. (기억은 못하지만 분명 초,중,고 언젠가 배웠을텐데...)
- vector를 매개변수로 넘겨줄 때 &를 사용하면 배열을 가리키는 별칭이 되어 원래 배열 공간을 그대로 사용한다.
&를 사용하지 않으면 배열을 복사하여 독립적인 배열을 만들어준다.
& 유무 차이가 궁금해서 검색했다. 검색결과를 보니 학부 C++ 수업 때 &에 대해 배웠던 것 같다. (심지어 그때 배우면서 놀랐던 거 같은데 이 문제 풀면서 기억하지 못하다니...)
[ 참고 ]
삼각형 결정 조건
c++ vector를 매개변수로 넘겨줄 때 & 유무 차이
'Algorithm 문제풀기 > Baekjoon' 카테고리의 다른 글
[C++] 1003번 피보나치 함수 (0) | 2021.02.22 |
---|---|
[C++] 16953번 A→ B (0) | 2021.02.18 |
[C++] 13417번 카드 문자열 (0) | 2021.02.16 |
[C++] 11497번 통나무 건너뛰기 (0) | 2021.02.14 |
[C++] 1439번 뒤집기 (0) | 2021.02.14 |