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과 같은지를 확인하여 평각인지를 판별
이러한 구조도 있다는 점만 기억해 두면 좋을 것 같습니다.
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift] Programmers - 배열의 평균값 (0) | 2024.02.19 |
---|---|
[Swift] Programmers - 짝수의 합 (0) | 2024.02.19 |
[Swift] Programmers - 두 수의 나눗셈 (0) | 2024.02.19 |
[Swift] Programmers - 두 수의 합 (0) | 2024.02.19 |
[Swift] Programmers - 숫자 비교하기 (0) | 2024.02.19 |