[프로그래머스][C++] 각도기
각도기
문제 링크
분석
각 조건별로 반환하는 값이 달라지는 문제입니다.
if문과 if else문을 사용하거나 삼항연산자를 사용할 수 있습니다.
우선 if문과 else문을 사용할 경우에 대해 알아보겠습니다.
이 경우 <
(작다 연산자)와 ==
(동등 연산자)같은 비교연산자를 알고있어야합니다.
또 &&
(논리 AND 연산자)를 사용해야 합니다.
삼항연산자의 경우 중첩한 상태를 사용하거나 조금 복잡한 코드를 작성해야합니다.
중첩하여 사용하지 않는 방법으로 작성해보겠습니다.
풀이
우선 if문을 사용하는 방법에 대해 알아보겠습니다.
int solution(int angle) {
int answer = 0;
if (0 < angle && angle < 90) answer = 1;
else if (angle == 90) answer = 2;
else if (90 < angle && angle < 180) answer = 3;
else if (angle == 180) answer = 4;
return answer;
}
if문은 {}
를 사용하지 않더라도 실행할 코드가 한줄이므로 생략했습니다.
비교연산자들과 논리 연산자는 링크로 대체하겠습니다.
비교 연산자
논리 연산자
다음으로 삼항 연산자를 사용하는 방법을 알아보겠습니다.
int solution(int angle) {
int answer = (angle % 90 == 0) ? angle / 90 * 2 : angle / 90 * 2 + 1;
return answer;
}
삼항 연산자의 조건문인 angle % 90 == 0
부터 살펴보겠습니다.
조건문이 참일 경우는 직각이거나 평각일 경우입니다.
조건문이 거짓일 경우는 예각이거나 둔각입니다.
각각 참과 거짓의 경우 반환해야할 값이 2와 4, 1과 3으로 짝수와 홀수로 정해져있습니다.
이 규칙을 활용해 참일 경우 각도의 크기를 90으로 나눕니다.
이 경우 직각은 90도이므로 1이라는 값이 나오며, 평각은 180도이므로 2라는 값이 나옵니다.
이렇게 결과값은 지금 각이 직각인지 평각인지 알 수 있는 값이 됩니다.
해당 값에 *2
를 해주면 정해진 값을 반환할 수 있습니다.
거짓일 경우에도 마찬가지로 각도의 크기를 90으로 나눕니다.
나눈 결과값은 지금 각이 예각인지 둔각인지 같은 방법으로 알 수 있는 값이 됩니다.
해당 값에 *2
를 하면 되지만 1씩 큰 홀수이므로 +1
을 해줍니다.
성능 요약
if문에 대한 성능은 다음과 같았습니다.
테스트 1 〉 통과 (0.01ms, 4.21MB)
테스트 2 〉 통과 (0.01ms, 4.16MB)
테스트 3 〉 통과 (0.01ms, 4.21MB)
테스트 4 〉 통과 (0.01ms, 4.21MB)
테스트 5 〉 통과 (0.01ms, 4.04MB)
테스트 6 〉 통과 (0.01ms, 4.14MB)
테스트 7 〉 통과 (0.01ms, 4.15MB)
테스트 8 〉 통과 (0.01ms, 4.21MB)
삼항 연산자에 대한 성능은 다음과 같았습니다.
테스트 1 〉 통과 (0.01ms, 4.22MB)
테스트 2 〉 통과 (0.01ms, 4.22MB)
테스트 3 〉 통과 (0.01ms, 3.68MB)
테스트 4 〉 통과 (0.01ms, 4.16MB)
테스트 5 〉 통과 (0.01ms, 4.17MB)
테스트 6 〉 통과 (0.01ms, 4.15MB)
테스트 7 〉 통과 (0.01ms, 4.15MB)
테스트 8 〉 통과 (0.01ms, 3.59MB)
댓글남기기