2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[Swift] Programmers - 각도기

2024. 2. 19. 20:17ㆍIOS/Swift-Algorithm (Programmers)
SMALL

https://school.programmers.co.kr/learn/courses/30/lessons/120829

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

* 각도기 *

각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과

180도 미만은 둔각 180도는 평각으로 분류합니다.

각 angle이 매개변수로 주어질 때

예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록

solution 함수를 완성해주세요.

 

문제만 봤을 때, 벌써부터 어렵다는 느낌이 들었다면 절 때! 쫄지 말아야 해요!


 

문제를 차근 차근 살펴 봅시다!

각에서

0도 초과 90도 미만예각

90도는 직각

90도 초과 180도 미만둔각

180도평각으로 분류합니다.

각 angle이 매개변수로 주어질 때

예각일 때 1,

직각일 때 2,

둔각일 때 3,

평각일 때 4

return하도록

solution 함수를 완성해주세요.

즉,

0도 초과 90도 미만 = 예각으로 분류

90도 = 직으로 분류

90도 초과 180도 미만 = 둔각으로 분류

180도 = 평각으로 분류

각 angle별로 예각은 1, 직각은 2, 둔각은 3, 평각은 4를 출력 하라

이렇게 문제를 풀어보면 처음 문제를 봤을 때 보단

접근 방식이 한결 나아지는 것을 알아볼 수 있을꺼에요.

 

 

문제의 핵심은 각각 angle별로 분류를 해야한다는 점이에요.

우리가 각각 어떠한 조건의 형식으로 분류를 해야하거나

특정한 조건이 필요한 경우 if문을 사용해야 한다는것은

지난 첫번째~일곱번째까지의 미션을 통해서 알게 되었을꺼에요.

그렇다면 if문을 사용을 해서 angle별로 분류를 해봅시다!

자 그전에 알아야 할 함정이 있어요.

문제중 초과 그리고 미만 이라는 단어가 나오는 것을 볼 수 있죠?

문제의 단일 핵심은 알았지만 더 큰 핵심, 초과/미만을 잘 이해를 못할 가능성이 높습니다!

어떠한 조건이 모두 만족되어야 하는 경우 사용되는 연산자가 있죠!?

바로 "논리 연산자"입니다.

 

어떠한 로직을 만족하기 위해서는 이러한 연산자를 잘 활용해야 한다는 점을

이해하고, 짚고 넘어가야합니다!

쉽게 이야기 해서 프로그래밍의 기본 데이터 베이스라고 하죠?!

논리 연산자의 종류를 간단히 알아봅시다!


 

논리곱 (AND)

표현 = ' && '

쓰임새 = 두 개의 조건이 모두 참일 때만 전체 조건이 참이 되는것!

예시 = 'if age > 10 && age < 20 { /* 코드 */ }'


논리 합 (OR)

표현: ' || '

쓰임새 = 두 개의 조건 중 하나라도 참이면 전체 조건이 참이 되는것!

예시 = if gender == "A" || gender == "B" { /* 코드 */ }


논리 부정 (NOT)

표현 = ' ! '

쓰임새 = 주어진 조건을 부정하는 것!

즉, 참이면 거짓, 거짓이면 참으로 바꾸는 것!

예시 = if !isError { /* 코드 */ }


이렇게 각각의 논리 연산자의 종류와 쓰임새들을 간단하게 정리 해 보았습니다!

어려워 보일 수 있지만! 문제의 핵심과 정의를 제대로 파악하고 있다면,

전혀 어렵지 않은 구문입니다!

자 문제로 다시 돌아가 보고 풀어봅시다!

이 문제의 정의를 잘 분석하고 해석해 보자면,

주어진 각도에 따라 예각, 직각, 둔각, 평각 중 어떤 종류인지를 판별하여 해당하는 값을 반환하는 것

우리는 알 수 있습니다!


풀이

먼저 예각인지 파악을 하기 전에 논리 연산자를 살펴보면 우리가 원하는 답을 얻기 위해서

위 논리 연산자의 종류와 문제를 정확하게 확인해 봅시다.

"각도가 0보다 크고 90보다 작은 경우"

자 두개의 조건이 보이죠!?

각도가 0보다 커야한다는 조건(1)과 90보다 작아야 한다는 조건(2)

이 두개의 조건이 만족해야한다는 의미입니다!

즉, 논리곱(AND) 연산자가 쓰여야 한다는 말이 되죠?

그렇다면 코드는 매우 심플해 집니다.

앞서 예시를 살펴 본다면 아래와 같습니다!

예시 = 'if age > 10 && age < 20 { /* 코드 */ }'

 

코드를 그대로 풀어본다면

if (만약) age(변수이름) 이 10 보다크고( > 10 && )

age(변수이름)가 20보다 작은경우 ( < 20 )

아주 쉽게 이해 되셨겠죠?!

그렇다면, 우리는 이를 대입해봅시다.

 

if angle > 0 && angle < 90

 

각도가 0보다 크고 각도가 90보다 작은 경우, 즉 0도 초과 90도 미만인 경우를 의미하죠!?

import Foundation

func solution(_ angle:Int) -> Int {
    //예각인지 확인
    if angle > 0 && angle < 90 {
        return 1 //예각
}

 

그리고 그 조건을 만족 하면 예각을 나타내는 1을 반환합니다!

예각인지 확인하는 코드는 이렇게 이루어 지는 것을 확인해 볼 수 있었습니다!

자 이렇게 예각인지 확인하는 코딩을 해봤으니

이제 이와같이 계속해서 코딩을 해봅시다!

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 if angle == 180 {
        return 4 // 평각
    } 
    // 위 조건 모두 해당하지 않을 경우
    else {
        return -1 // 잘못된 입력
    }
}

 

직각은 말 그대로 정확히 90도인 각도를 의미 하기에

논리 연산자를 사용 할 필요가 없기에 '=='(같음) 연산자를 사용하여

angle 이 90이라면, 2를 출력하라는 의미의 코드를 작성해줍니다.

여기까지만 알아도 나머지 둔각과 평각에 대해서는 이제 같은 방식이기 때문에

동일하게 진행 하면됩니다!

그리고 또 한가지 알아야 할 점이 있다면,

else if문 마지막에 else를 꼭 해주어야 한다는 점인데요,

else if를 사용하게 되면 다중 조건이 성립 되어

마지막에 else문을 입력해주지 않는다면, 오류가 나게 됩니다.

이는 모든 가능한 경우에 대해 처리 되지 않아 생기는 오류이니 꼭 else를 붙여 주어야 합니다.

+ 모든 연산자를 잘 이해하고 인용할 수 있다면,

삼항 연산자를 사용하여 더욱 쉽고 빠르게 풀이도 가능합니다.

 

[삼항 조건 연산자 사용 예시]

import Foundation

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

 

각도가 90보다 작은지를 확인 -> 예각인지를 판별 -> 그 다음에 주어진 각도가 90와 같은지를 확인 후

직각인지를 판별 그 이후 주어진 각도가 180보다 작은지를 확인 ->

둔각인지를 판별 이후 -> 각도가 180과 같은지를 확인하여 평각인지를 판별

이러한 구조도 있다는 점만 기억해 두면 좋을 것 같습니다.

728x90