프로그래머스 코딩테스트 연습 입문 '삼각형의 완성조건(1)' 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❓문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
- 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.
⚠️ 제한사항 및 입출력 예
- sides의 원소는 자연수입니다.
- sides의 길이는 3입니다.
- 1 ≤ sides의 원소 ≤ 1,000
sides (입력) | result (출력) |
[1, 2, 3] | 2 |
[3, 6, 2] | 2 |
[199, 72, 222] | 1 |
✏️ 직접 구현한 코드
이번 문제는 두 가지 방법으로 풀어보았습니다.
// 첫 번째 방법
import java.util.Arrays;
class Solution {
public int solution(int[] sides) {
int answer;
Arrays.sort(sides);
if(sides[0] + sides[1] > sides[2]) {
answer = 1;
} else {
answer = 2;
}
return answer;
}
}
▶ 코드 설명
- Arrays클래스의 sort메서드를 이용해 sides배열을 오름차순으로 정렬했습니다. 정렬하면 sides배열은 2번 방의 값이 가장 크고 나머지 0번, 1번 방의 값이 작은 두 수가 됩니다.
- 0번, 1번 방의 값을 더한 수가 2번 방의 값보다 크면 answer에 1을 넣고, 아니라면, 2를 넣도록 했습니다.
// 두 번째 방법
class Solution {
public int solution(int[] sides) {
int maxIndex = 0;
int sum = 0;
int answer;
for(int i = 0; i < 3; i++) {
if(sides[maxIndex] < sides[i]) {
maxIndex = i;
}
}
for(int i = 0; i < 3; i++) {
if(i == maxIndex) {
continue;
}
sum += sides[i];
}
if(sides[maxIndex] >= sum) {
answer = 2;
} else {
answer = 1;
}
return answer;
}
}
▶ 코드 설명
- 첫 번째 for문에서는 가장 큰 값이 들어있는 방의 인덱스를 maxIndex에 저장했습니다.
- 두 번째 for문에서는 가장 큰 값이 들어있는 maxIndex의 방을 continue해서, 나머지 작은 두 수를 더한 값을 sum에 넣었습니다.
- if문을 이용하여, maxIndex의 방의 값이 sum의 값보다 더 크거나 같으면 answer에 2를 넣고, 아니라면 1을 넣도록 했습니다.
💦 어려웠던 점
두 번째 방법 마지막 if문에서 막혔는데, 문제를 보면 '가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.'라고 써있습니다. 작아야한다고 하면 크거나 같아야합니다. 그걸 잊고 마지막 if문의 조건문을 >(크거나)만 추가한 실수 때문에 푸는데 시간이 걸렸습니다.
'코딩테스트 회고록 > 코테_Java' 카테고리의 다른 글
[JAVA] 프로그래머스 - 중복된 숫자 개수 (0) | 2023.02.10 |
---|---|
[JAVA] 프로그래머스 - 세균 증식 (0) | 2023.02.04 |
[JAVA] 프로그래머스 - 배열 자르기 (0) | 2023.02.01 |
[JAVA] 프로그래머스 - 문자열 뒤집기 (0) | 2023.01.31 |
[JAVA] 프로그래머스 - 나이 출력 (0) | 2023.01.31 |