[프로그래머스] 코딩 테스트 연습 - 삼각형의 완성조건(2)(Java)

수경·2022년 11월 18일
0

problem solving

목록 보기
61/174

프로그래머스 - 삼각형의 완성조건(2)

문제

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

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

삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.

❗️제한사항

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

입출력 예시

sidesresult
[1, 2]1
[3, 6]5
[11, 7]13

❗️설명

  • 1번 예시
    두 변이 1, 2 인 경우 삼각형을 완성시키려면 나머지 한 변이 2여야 합니다. 따라서 1을 return합니다.

  • 2번 예시

    • 가장 긴 변이 6인 경우, 될 수 있는 나머지 한 변은 4, 5, 6 로 3개입니다.
    • 나머지 한 변이 가장 긴 변인 경우, 될 수 있는 한 변은 7, 8 로 2개입니다.
    • 따라서 3 + 2 = 5 를 return합니다.
  • 3번 예시

    • 가장 긴 변이 11인 경우, 될 수 있는 나머지 한 변은 5, 6, 7, 8, 9, 10, 11 로 7개입니다.
    • 나머지 한 변이 가장 긴 변인 경우,될 수 있는 한 변은 12, 13, 14, 15, 16, 17 로 6개입니다.
    • 따라서 7 + 6 = 13 을 return합니다.

풀이

삼각형의 조건이고 뭐고 다 모르겠고, 예시 설명에 초점을 두고 풀었다.

2번 예시의 경우, input이 [3, 6] 일 때, 될 수 있는 변의 길이는 4 ~ 8 이다.
3번 예시의 경우, input이 [11, 7]일 때, 될 수 있는 변의 길이는 5 ~ 17 이다.

input의 큰 값을 longer, 작은 값을 shorter로 둔다고 했을 경우,
될 수 있는 변의 길이는 longer-shorter+1 ~ longer+shorter-1 의 범위 값이다.

이거 말고는 생각이 안나서 IntStream.range()를 활용해서 문제를 풀었다.

IntStream.range() 로 변의 길이가 될 수 있는 값들을 가져와서 총 요소의 개수를 세어주고 반환하면 된다!

삽질

오늘은 삽질까진 아니지만!

처음에 longer와 shorter의 값을 정해줄 때, Math.max()/Math.min() 함수를 적당히 쓰고 싶었는데,
이 문제에서 사용하려면 sides의 첫 번째 인자와 두 번째 인자를 직접 넣어줘야 했다.

하드코딩이 싫어서 처음에는 stream의 max()를 쓰는 거로 코딩을 했었다.
근데 다른 사람들이 제출한 걸 봤더니 다들 Math.max()를 잘 사용하고 있더라,,,

그래서 나도 냅다 바꿨다!

확실히 빠르기도 하고, 어차피 두 개 요소밖에 없으니까 크게 문제될 것도 없긴 하다!
그저 직접 지정해주는 코드가 아쉬울 뿐

근데 뭐 어땨용? 빠르면 장땡


코드

import java.util.stream.IntStream;

public class Triangle2 {
    public int solution(int[] sides) {
        int longer = Math.max(sides[0], sides[1]);
        int shorter = Math.min(sides[0], sides[1]);
		
        // range(num1, num2) -> num1 ~ (num2-1) 까지 반환
        return (int)IntStream.range(longer-shorter+1, longer+shorter).count();
    }

    public static void main(String[] args) {
        Triangle2 triangle2 = new Triangle2();
        System.out.println(triangle2.solution(new int[]{1, 2}));    // 1
        System.out.println(triangle2.solution(new int[]{3, 6}));    // 5
        System.out.println(triangle2.solution(new int[]{11, 7}));   // 13
    }
}
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글