오늘은 아주 쉬운 문제를 더 쉽게 풀 수 없을까 고민하다 마주친 조건문 프로그래머스 문제를 들고 왔다.
입력한 각에 따른 return 값을 구현하는 코드를 짜면 된다.
처음에는 if else 문을 쓰기 싫었다.
그래서 switch문으로 아래와 같이 작성했다.
(return 값을 정하지 않아서 문제가 생기긴 함, 수정한 후 적용해도 같은 타입에러가 남 ㅇㅅㅇ )
class Solution {
public int solution(int angle) {
int answer = 0;
switch (angle) {
case (angle < 90) :
return 1;
case (angle = 90) :
return 2;
case (angle > 90 && angle < 180) : //type casting error
return 3;
case (angle = 180) :
return 4;
}
return answer;
}
}
하지만 제목과 같이 타입을 변환할 수 없다고 떴다.
그런데 if else문으로 하나하나 쓰기 너무 싫었다.
왠진 모르겠다.
걍싫었다.
다른 방법을 알아내서 조합해서 값을 추출하고 싶었따.
분명 다른 쉬운 법이 있을 거 아니야. 라면서..

이런, 대부분의 언어에서는 지원하지 않는 기능이라고 한다.
switch 문에서 적용될 수 있는 expression
1. int, char, enum 과 같은 정수 타입
2. string 값
걍 조건문 넣음
class Solution {
public int solution(int angle) {
int answer = 0;
if (angle < 90) {
answer = 1;
} else if (angle == 90) {
answer = 2;
} else if (angle > 90 && angle < 180) {
answer = 3;
}else if (angle == 180) {
answer = 4;
}
return answer;
}
}
더 생각해본 풀이법
삼항연산자로 쓸 수 있지 않을까?
boolean값에 따라 값이 도출되는데
중첩으로 써야해서 우선 포기하고 문제를 제출했다.
그런데 최상단에 뜨는 추천 풀이 코드가 삼항연산자 이용한 코드였다.
뭔가 기분이 좋았다.(읭)
그 코드는 아래와 같다.
class Solution {
public int solution(int angle) {
return angle == 180 ? 4 : angle < 90 ? 1 : angle == 90 ? 2 : angle > 90 ? 3 : 0;
}
}
또한 내가 사용하려했던 모듈화 스위치문ㅋ 을 구현하여 푼 사람도 있다.
class Solution {
public int solution(int angle) {
int answer = 0;
String gak = null;
if(0 < angle && angle < 90){
gak = "예각";
};
if(angle == 90){
gak = "직각";
};
if(90 < angle && angle < 180){
gak = "둔각";
};
if(angle == 180){
gak = "평각";
};
switch(gak){
case "예각":
answer = 1;
break;
case "직각":
answer = 2;
break;
case "둔각":
answer = 3;
break;
case "평각":
answer = 4;
break;
}
return answer;
};
}
귀찮더라도 모듈화 해서 더 편하고 간편하게 코드를 유지보수할 수 있는 방법을 모색하자.
출처
문제풀이 : https://school.programmers.co.kr/learn/courses/30/lessons/120829/solution_groups?language=java
switch 개념 :
https://www.quora.com/Can-we-use-Boolean-in-a-switch-statement
https://stackoverflow.com/questions/19351236/switch-statement-with-boolean-is-not-working
https://www.w3schools.com/java/java_switch.asp