코딩테스트 연습/프로그래머스 LV.0

[프로그래머스] Lv.0 삼각형의 완성조건 (2) - 자바(Java)

5ein 2024. 5. 5. 23:48

문제: 코딩테스트 연습 - 삼각형의 완성조건 (2) | 프로그래머스 스쿨 (programmers.co.kr)

문제설명

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

  • 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 

나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.


제한사항

  • sides의 원소는 자연수입니다.
  • sides의 길이는 2입니다.
  • 1 ≤ sides의 원소 ≤ 1,000

입출력 예

sides result
[1, 2] 1
[3, 6] 5
[11, 7] 13

나의 문제 풀이

import java.util.HashSet;
class Solution {
    public int solution(int[] sides) {
        int answer = 0;
        HashSet<Integer> set = new HashSet<>();
        int A = sides[0] > sides[1]? sides[0] : sides[1]; //큰 수
        int B = sides[0] > sides[1]? sides[1] : sides[0]; //작은 수
        //i가 다른 두변의 길이 중 하나일 때
        for (int i = 1; i < A; i++) {
            if(i + B > A && !set.contains(i)) {
                set.add(i);
            }
        }
        //i가 가장 긴 변 일 때
        for (int i = A; i < A + B; i++) {
            int sum = A + B;
            if(i < sum && !set.contains(i)) {
                set.add(i);
            }
        }
        answer = set.size();
        return answer;
    }
}

다른 사람의 문제풀이

//다른사람의 풀이1
class Solution {
    public int solution(int[] sides) {
        int answer = 0;
        
        int max = Math.max(sides[0], sides[1]);
        int min = Math.min(sides[0], sides[1]);
        
        answer += min * 2 - 1;
        return answer;
    }
}

//다른사람의 풀이2
class Solution {
    public int solution(int[] sides) {
        int answer = 0;

        int max = sides[0] + sides[1] - 1;
        int min = 0;

        if (sides[0] > sides[1]) {
            min = sides[0] - sides[1];
        } else {
            min = sides[1] - sides[0];
        }

        answer = max - min;
        return answer;
    }
}

느낀점

다른사람의 풀이를 보고 와 이렇게 풀 수도 있구나 라고 생각 했다..


문제 출처: 코딩테스트 연습 | 프로그래머스 스쿨 (programmers.co.kr)