주니어 기초 코딩공부/JAVA_programmers_코딩테스트

삼각형의 완성조건 (2)_programmers_lev00

jju_developer 2022. 12. 29. 15:15
728x90

<코딩 테스트>

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

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

 

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

 

<나의 풀이 과정>

우선 삼각형의 두 변의 길이가 주어질 때

두 개를 더한 값과, 두 값을 뺀 값을 구했습니다.

삼각형의 변의 길이는 주어지는 두 변의 합보다 작아야 하며,

될 수 있는 변의 길이가 몇 개가 있느냐의 문제이기 때문에

마지막에 highLimit에서 lowLimit을 빼고 -1을 해주었습니다.

 

<나의 풀이 코드>

public class Test {

	public static void main(String[] args) {
		System.out.println(solution(new int[] { 1, 2 })); // 1;
		System.out.println(solution(new int[] { 11, 7 })); // 13;
	}

	static int solution(int[] sides) {
		// {11,7} 두변의 길이가 들어온다고 가정
		// 두변의 길이 중 가장 큰 값 찾기
		int bigValue = Math.max(sides[0], sides[1]);
		// 작은 길이 찾기
		int smallValue = Math.min(sides[0], sides[1]);

		// 긴변 - 작은변 => 11-7 = 4
		int lowLimit = bigValue - smallValue;
		// 가장 큰변이 올수 있는 길이는? 11+4 = 18
		int highLimit = bigValue + smallValue;
		// 길이가 될수 있는 총 수 =>18-4-1 = 13
		return highLimit - lowLimit - 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]);
        for(int i=1; i<sides[0]+sides[1]; i++){
            // i가 가장 큰 변일 때
            if(i>max){
                if(min+max>i){
                    answer++;
                }
            } else {
                // i가 가장 크지 않을 때
                if(min+i>max){
                    answer++;
                }
            }

        }

        // 값이 최대일 경우

        return answer;
    }
}

<다른 사람 풀이>

class Solution {
    public int solution(int[] sides) {
            int min=Math.min(sides[0], sides[1]);
            int max=Math.max(sides[0], sides[1]);
            int sum=sides[0]+sides[1];
            int answer = 0;

            for(int i=1;i<sum;i++) {
                if(i<=min||i<max){//i가 중간값 또는 최솟값 
                    if(max<min+i) {
                        answer++;
                    }
                }else if(i>=max) {//i가 가장 긴 변이면
                    answer++;
                }
            }
            return answer;
        }
    }

 

 

 

 

 

 

 

 

 

 

 

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

 

프로그래머스

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

programmers.co.kr

 

728x90