지우너

[프로그래머스 Lv.0] 삼각형의 완성조건(2) C++ 본문

카테고리 없음

[프로그래머스 Lv.0] 삼각형의 완성조건(2) C++

지옹 2024. 3. 7. 15:16

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120868

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

계획 세우기

입출력 예 설명 부분이 너무 친절하게 되어 있어서 해당 부분을 따라가면 될 것 같다. 아래의 두 가지 경우를 더하면 정답이 된다.

<<가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 한다.>>

  1. 가장 긴 변이 주어진 두 수 중 하나인 경우
  2. 나머지 한 변이 가장 긴 변인 경우

1의 경우 두 수를 비교하여 더 큰 쪽을 선택한다. 가장 큰 수이기 때문에 (조건1) 나머지 한 변은 선택한 수보다 작거나 같아야 하며(선택한 수가 가장 긴 변이기 때문), (조건2) 선택하지 않은 수와 어떤 수를 더해서 선택한 수보다 큰 값이 나오는 경우를 찾으면 된다.

2의 경우 (조건1)두 수 중 큰 쪽 보다 큰 수여야 하며, (조건2)두수를 더한 수보다 작은 수여야 한다.

 

풀이

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> sides) {
    int answer = 0;
    // 1. 가장 긴 변이 sides 중 하나인 경우
    // - 나머지 변은 가장 긴 변보다 짧다.
    // - 나머지 변+짧은 변 > 가장긴 변이어야 한다.
    int longest_side = max(sides[0], sides[1]);
    int short_side = min(sides[0], sides[1]);
    
    for (int i =0 ; i<longest_side ; i++){
        if(i+short_side>longest_side) answer++;
    }
    
    // 2. 주어지지 않은 변이 가장 긴 변인 경우
    // - 주어진 변 중 큰 쪽보다 크거나 같은 수여야 한다.
    // - sides[0] + sides[1] > i
    for (int i=longest_side; sides[0] + sides[1]>i;i++){
        answer++;
    }
    
    return answer;
}

 

다른 사람 풀이

#include <iostream>
#include <vector>
using namespace std;

int solution(vector<int> v)
{
    if(v[0] < v[1])
        swap(v[0],v[1]);
    return v[1] * 2 - 1;
}

 

해설

https://tnsgh9603.tistory.com/137

 

[Programmers] 삼각형의 완성조건 (2)

https://school.programmers.co.kr/learn/courses/30/lessons/120868?language=python3' 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술

tnsgh9603.tistory.com