8. 프로그래머스 각도기
class Solution {
fun solution(angle: Int): Int {
var answer: Int = 0
return answer
}
}
초기 코드이다.
예각일 때, 직각일 때, 둔각일 때, 평각일 때 를 각각 구해야한다.
if와 else if 몇개를 쓰면 나올 거 같다.
근데 ~일 때이니 when이라는 조건도 사용가능 할거 같다.
- When 활용하기
when (각도) {
0<각도<90 -> 1
각도=90 -> 2
90<각도<180 -> 3
else -> 4}
이렇게 집어 넣어보자. 근데 0<각도<90 -> 1 이거랑 90<각도<180 -> 3 이건 두개의 논리항을 사용한다.
0<각도, 각도<90 이거랑 90<각도, 각도<180 이렇게 각각 두 개의 항이 있고 이 두 항을 모두 만족해야 하므로 논리곱 연산자를 같이 사용해보자.
class Solution {
fun solution(angle: Int): Int {
var answer: Int = 0
when (angle) {
0<angle && angle<90 -> return 1
angle == 90 -> return 2
90<angle && angle<180 -> return 3
angle == 180 -> return 4}
return answer
}
}
에러가 뜬다...
error: incompatible types: Boolean and Int
이 에러를 구글에서 찾아보았다. Boolean 값은 True나 False 두 개의 값만 가질 수 있다. 그래서 Int인 정수와 양립할 수 없다고 하는 에러인거 같다. 지금 생각해보니 논리연산자는 true와 false라는 값을 갖는데 그 자리에 angle을 넣어서 오류가 생겼다는 거 같다. 그래서 4번째 줄의 when(angle){ 에서
angle 자리에 true로 정확한 값을 찾는다고 쓰거나 아예 (angle) 즉 괄호를 아예 없애 버리면 값이 제대로 나온다.
근데 이러면 너무 길다.
- in 활용하기
when 식에서 in .. 을 사용하여 범위를 조절 할 수 있다. 따라서 angle은 Int 즉 정수 이므로 0도 이상이면 1부터 시작하니 in 1..89로 하면 1~89까지의 범위를 가질 수 있다. 이것까지 이용해보자. 근데 이 때에는 논리연산자를 사용하는 것이 아니라 진짜 값을 구할 수 있기에 ()괄호 안에 angle을 다시 넣어보자.
class Solution {
fun solution(angle: Int): Int {
val answer: Int = 0
when (angle) {
in 1..89 -> return 1
90 -> return 2
in 91..179 -> return 3
180 -> return 4}
return answer
}
}
- 튜터님께 찾아가보기
결론적으로 굳이 모두 return이 들어가 있는 상태인데 return answer가 필요했느냐 라는 답변을 받았다. 그리고 문법 강의를 더 들어보라고 하셨다... 저기 위3번째 줄의 Int = 0이 answer에 박혀 있는데 0을 지우고 그대로 when절을 넣으면 answer에 값을 넣을 수 있다고한다. 또 지금 변하지 않는 상수인 val이 들어가 있으니 이거를 변하는 값인 var을 넣어보라고...그리고 answer 에 연결을 시켜줘야 한다고 강조하시고 answer = 1,2,3,4 도 써보라고 하셨다.
우선 answer 1234를 넣어서 answer에 연결시켜주자.
class Solution {
fun solution(angle: Int): Int {
var answer: Int = 0
when (angle) {
in 1..89 -> answer = 1
90 -> answer = 2
in 91..179 -> answer = 3
180 -> answer = 4}
return answer
}
}
들어보니 굳이 return answer랑 3번째 줄이 필요치 않은거 같기도 하다.
자꾸 answer를 강조 하시는걸 보니 retrun answer를 return when이 되게끔 해봐야겠다.
class Solution {
fun solution(angle: Int): Int {
return when (angle) {
in 1..89 -> 1
90 -> 2
in 91..179 -> 3
180 -> 4
else -> 0}
}
}
return 과 Int{}이 부분도 굳이 필요없는 부분 아닐까? 한번 빼 보자.
class Solution {
fun solution(angle: Int) = when (angle) {
in 1..89 -> 1
90 -> 2
in 91..179 -> 3
180 -> 4
else -> 0}
}
내일은 우선 문법강의를 머리에 좀 박아 넣으면서 해야겠다.
'알고리즘' 카테고리의 다른 글
알고리즘 - 배열의 평균값, 짝수와 홀수 (0) | 2023.12.04 |
---|---|
프로그래머스 - 짝수의 합 (0) | 2023.11.29 |
알고리즘 문제풀이 1~7 (1) | 2023.11.27 |
프로그래머스 - 이상한 문자 만들기 (0) | 2023.11.22 |
프로그래머스 3진법 뒤집기 (0) | 2023.11.21 |