본문 바로가기
iOS Swift/Study

프로그래머스 Swift 각도기 문제

by 야고이 2024. 3. 6.
728x90

240306

 

8. 각도기

오답

1트

func solution(_ angle:Int) -> Int {
    if angle == 180 {
        return 4
    }
    else if angle == 90 {
        return 2
    }
    else if angle > 0 && angle < 90 {
        return 1
    } else angle > 90 && angle < 180 {
        return 3
    }
}

안된다,, if 와ㅏ eles if 에 대해서 정확히 모르고 있다

오답노트 : else 를 잘못 작성함 조건은 빼고 리턴값만 넣어주면 됨

 

 

2트

func solution(_ angle:Int) -> Int {
    if angle > 0 {
        if angle < 90 {
            print ("0<a<90")
            return 1
        }
    } else if angle == 90 {
        print ("90")
        return 2
    } else if angle > 90 {
        if angle < 180 {
            print ("90<a<180")
            return 3
        }
    } else {
        print ("180")
        return 4
    }
    print("?")
    return 4
}

나도 뭔가 잘못 썼다는걸 알지만 어케 고칠지는 모른다

첫번째 if 문에 부합하면 리턴값이 잘나오는데 나머지 값들은 전부 맨 밑 리턴 값이 4가 나온다

오답노트 : 굳이 else if 안에 if 를 넣지 않아도 됨. 마지막에 리턴값도 안넣어도 됨

 

 

정답

import Foundation

func solution(_ angle: Int) -> Int {
    if angle > 0 && angle < 90 {
        return 1 
    } else if angle == 90 {
        return 2 
    } else if angle > 90 && angle < 180 {
        return 3 
    } else  {
        return 4 
    } 
}

결국 다른 코드 보고 해봄

다른 사람 코드인데 튜터님과 같이 수정 했다

if 안에 if 을 넣으면 가독성이 떨어져서 else if 로 새로운 조건을 넣고 마지막은 else 로  조건 없이 리턴 값만 넣는다

마지막 조건까지 else if 로 작성하면

Missing return in global function expected to return 'Int'

요런 오류가 나는데 

이 함수에선 반드시 Int 값으로 리턴해야하기에 나는 오류이다

func solution3(_ angle: Int) -> Int {
    if angle > 0 && angle < 90 {
        return 1
    } else if angle == 90 {
        return 2
    } else if angle > 90 && angle < 180 {
        return 3
    } else if angle == 180  {
        return 4
    }
    return -1
}

이런식으로 마지막에 리턴값을 넣어주면 된다 

위에 4가지 조건을 다 충족 못할시엔 -1 이 리턴 될텐데 각도기엔 마이너스가 없을테니 리턴 되지 않겠지? 

 

 

Swich 와 Guard 로도 가능할지..?

let angle2 = Int.random(in: 0 ... 180)

switch angle2 {
case ..<90:
    print("1")
case 90:
    print("2")
case 91..<180:
    print("3")
case 180:
    print("4")
default:
    break
}

강의에서 했던 예제를 활용하여 swich 문으로 작성하여 보았다

근데 Return invalid outside of a func 라는 오류가 뜸

리턴값은 함수 밖에서 사용할 수 없다네 ㅠㅠ 그럼 스위치는 어케 리턴하는데요

--> 함수로 묶어주면 된다,,

스위치문으로 다시 풀어 보진 않았따,,

 

 

guard 문은

false 일때만 else 블록 실행하고 true 이면 동일한 리턴값을 내보내서 이 문제에는 적합하지 않는 것 같다

728x90

댓글