지우너
[프로그래머스 Lv.0] 삼각형의 완성조건(2) C++ 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120868
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
계획 세우기
입출력 예 설명 부분이 너무 친절하게 되어 있어서 해당 부분을 따라가면 될 것 같다. 아래의 두 가지 경우를 더하면 정답이 된다.
<<가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 한다.>>
- 가장 긴 변이 주어진 두 수 중 하나인 경우
- 나머지 한 변이 가장 긴 변인 경우
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