티스토리 뷰
https://school.programmers.co.kr/learn/courses/30/lessons/120889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
- 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 세 변의 길이가 담긴 배열 sides가 매개변수로 주어집니다.
세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2 를 리턴하도록 함수를 작성하세요.
제한사항
입출력 예
입출력 예 설명
아이디어
- 중복된 코드는 분리해서 한 번만 쓰자!
- sides[0] < sides[1] +sides[2]; 이것의 타입 자체는 int가 아니라 boolean이다.
작성한 초기 코드
class Solution {
public int solution(int[] sides) {
boolean segment = sides[0] <sides[1] + sides[2];
if (segment) {
return 1;
}
else {
return 2;
}
}
}
- 테스트 케이스 일부만 통과
- 여기서 고려해봄직한 상황은 반드시 sides[0]이 가장 긴 변이라고만 가정했다는 것이다.
- 근데 다른 테스트 케이스에서는 1이나 2가 가장 긴 변일 수도 있음.
- 0번이 클 때, 1번이 클 때, 2번이 클 때라는 경우의 수 다 포함해줘야 하고, 그 조건 먼저 검사하고 세부조건으로 들어가야 함.
- 결국 답을 알려면, 가장 긴 변이 무엇인지만 알면 된다.
- 그 가정을 전부 해서 확인해줘야 함.
수정하면
class Solution {
public int solution(int[] sides) {
if (sides[0]>sides[1] && sides[0] >sides[2]) {
boolean segment1 = sides[0] <sides[1] + sides[2];
if (segment1) {
return 1;
}
else {
return 2;
}
}
if (sides[1]>sides[0] && sides[1] >sides[2]) {
boolean segment2 = sides[1] < sides[0] + sides[2];
if (segment2) {
return 1;
}
else {
return 2;
}
}
else {
boolean segment3 = sides[2] < sides[0] + sides[1];
if (segment3) {
return 1;
}
else {
return 2;
}
}
}
}
그런데 이걸 더 줄일 수 있다.
- 중복 부분 하나로 합쳐서 반복 제거.
- 참이면 1, else면 2 이 부분. 하는 일이 똑같다는 것.
- 이 것을 아예 한 번만 써줄 수 있도록 수정해야.
- 분기문을 만들었는데, 분기문마다 똑같이 하는 일이라면,
- 분기문 밖에다가 한 번만 만들어서 공통적으로 수행하게 하면 되는 것이니까.
정리한 제출 코드
class Solution {
public int solution(int[] sides) {
boolean segment;
if(sides[0]>sides[1] && sides[0] > sides[2]) {
segment = sides[0] < sides[1] +sides[2];
}
else if(sides[1]>sides[0] && sides[1] > sides[2]) {
segment = sides[1] < sides[0] +sides[2];
}
else {
segment = sides[2] < sides[0] +sides[1];
}
if(segment) {
return 1;
}
else {
return 2;
}
}
}
728x90
반응형
'[개발] - Java > 알고리즘' 카테고리의 다른 글
[Lv.0] 길이에 따른 연산 (0) | 2023.05.25 |
---|---|
[Lv.0] (2문제) 소문자로 바꾸기, 대문자로 바꾸기 (0) | 2023.05.25 |
[Lv.0] 특정 문자 제거하기 (0) | 2023.05.18 |
[Lv.0] 두 수의 나눗셈 (0) | 2023.05.10 |
[Lv.0] (2문제) 배열 뒤집기, 배열 원소의 길이 (0) | 2023.05.10 |
Comments