| 문제
각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각, 180도는 평각으로 분류합니다.
각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.
- 예각 : 0 < angle < 90
- 직각 : angle = 90
- 둔각 : 90 < angle < 180
- 평각 : angle = 180
| 제한 사항
- 0 < angle ≤ 180
- angle은 정수입니다.
| 입출력 예
angle | result |
70 | 1 |
91 | 3 |
180 | 4 |
| 힌트
문제에서 총 4개의 조건이 주어졌습니다.
일부는 점의 조건이고 일부는 선의 조건이네요.
제한사항에 angle이 0보다 크고 180보다 작거나 같다고 명시되어 있으니
코드에서 이 부분을 별도로 고려해줄 필요는 없습니다.
선의 조건은 if, 점의 조건은 switch 잊지 않으셨죠?
| 풀이 1
문제에 나와있는 조건을 그대로 코드로 옮겨보았습니다.
public int solution01(int angle) {
int answer = 0;
if(angle < 90) answer = 1;
else if(angle == 90) answer = 2;
else if(angle < 180) answer = 3;
else answer = 4;
return answer;
}
| 풀이 2
문제를 보다보면 기준점이 90과 180인 것을 확인할 수 있습니다.
그래서 2개의 기준점을 외부 if문으로 잡고, 중첩 if문을 사용해보았습니다.
public int solution02(int angle) {
int answer = 0;
if(angle <= 90){
if(angle == 90) answer = 2;
else answer = 1;
}else{
if(angle == 180) answer = 4;
else answer=3;
}
return answer;
}
| 해설
프로그래머스에서 주어진 테스트 케이스는 총 8개이고
이중에서 테스트 1,4,5은 풀이2가 풀이1 보다 빠르게 수행되었습니다.
나머지 테스트 2,3,6,7,8은 풀이1이 더 빨랐구요.
왜 이런일이 생겼을 까요?
if문은 위에서 부터 아래로 코드가 수행됩니다.
그리고 만일 조건식의 결과가 true인 문장을 만나면 거기서 수행을 끝내죠.
만일 예각인 경우를 찾는다면 풀이1에서는 첫번째 조건문이지만
풀이2에서는 첫번째 조건문을 지나서 두번째 조건문까지 도달해야하기 때문에
상대적으로 시간이 조금 더 걸릴 수 있습니다.
그래서 조건문을 통해 로직을 구성할때는
가장 많은 데이터가 해당되는 조건식을 상단에 두는 것이 좋습니다.
'개발 > 개발 공부' 카테고리의 다른 글
[프로그래머스] 코딩테스트 입문 : 짝수의 합 (0) | 2024.09.10 |
---|---|
[프로그래머스] 코딩테스트 입문 : 양꼬치 (0) | 2024.09.09 |
[프로그래머스] 코딩테스트 입문 : 특정 문자 제거하기 (0) | 2024.09.05 |
[프로그래머스] 코딩테스트 입문 : 문자 반복 출력하기 (4) | 2024.09.04 |
[프로그래머스] 코딩테스트 입문 : 짝수 홀수 개수 (12) | 2024.09.04 |
댓글