본문 바로가기
Algorithm 문제풀기/Baekjoon

[C++] 1448번 삼각형 만들기

by 내일이야 2021. 2. 17.

[ 문제 ]
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