일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- RN 프로젝트
- 삼항연산자
- leetcode
- 자바스크립트 reduce()
- [파이썬 실습] 중급 문제
- 엘리스 ai 트랙
- reactnativecli
- [파이썬 실습] 심화 문제
- 리트코드
- 자바스크립트 split()
- [AI 5기] 연습 문제집
- 코딩부트캠프
- HTML
- [파이썬 실습] 기초 문제
- 엘리스
- 코드스테이츠
- 간단한 날씨 웹 만들기
- 프로그래머스
- 개발일기
- 날씨 웹 만들기
- 자바스크립트 날씨 웹 만들기
- 프론트개발
- 엘리스 AI 트랙 5기
- 자바스크립트 sort()
- 자바스크립트 날씨
- 프론트개발공부
- JavaScript
- 부트캠프
- 자바스크립트
- 개발공부
- Today
- Total
개발조각
[프로그래머스] 정수 제곱근 판별 본문
이번 문제는 Math에 대해 잘 아시는 분들은 쉽게 풀었을 것 같아요.
해결방안
function solution(n) {
return Math.sqrt(n) % 1 ? -1 : Math.pow(Math.sqrt(n)+1, 2)
}
이번문제는 해결방안 순서를 쓰기 애매해서 바로 해결방안에 대해 설명하겠습니다.
이 문제를 보면 숫자n이 제곱근인지 아닌지를 판별하는 문제입니다.
그래서 조건문을 써주었는데요. 그중 삼항연산자를 써주었습니다.
삼항 연산자
구문 : 조건 ? true : false
- 조건이 true이면 true를 실행
- 조건이 false이면 false를 실행
이제 삼항 연산자 가지고 조건과 true, false에 무엇을 넣을 건가에 대해 써보자면
- 조건 : n이 어떤 양의 정수 x의 제곱인지 아닌지 판단 -> Math.sqrt(n) % 1
- true : n이 양의 정수 x의 제곱이 아니면 -1반환 -> -1
- false : n이 양의 정수 x의 제곱이면 x+1의 제곱 -> Math.pow(Math.sqrt(n)+1, 2)
이렇게 구하였습니다.
조건 : n이 어떤 양의 정수 x의 제곱인지 아닌지 판단 -> Math.sqrt(n) % 1
Math.sqrt() 함수를 사용하면 편리하게 제곱근을 구할 수 있습니다.
MDN Web Docs
Math.sqrt() 함수는 숫자의 제곱근을 반환합니다.
문법 : Math.sqrt(x)
// Math.sqrt() 함수 예제
Math.sqrt(9); // 3
Math.sqrt(2); // 1.414213562373095
Math.sqrt(1); // 1
Math.sqrt(0); // 0
Math.sqrt(-1); // NaN
(오늘도 MDN에 들어가보니 홈페이지 ui가 바뀌었네요.)
그러나 여기서 구해야 되는게 제곱근을 구하자는 게 아니라 n이 양의 정수의 제곱근인지를 구해야 됩니다.
그래서 n의 제곱근 % 1를 써주었습니다.
만약 제곱근이 양의 정수라면
- 5%1 = 0
- 7%1 = 0
나머지 값이 무조건 0이 됩니다.
제곱근이 양의 정수가 아니라면
- 2.34 % 1 = 0.33999999999999986
- -2 % 1 = -0
나머지 값이 0이 아닌 모든 값이 나오게 됩니다.
여기서 조건을 Math.sqrt(n) % 1=== 0 이 아닌 Math.sqrt(n) % 1만 쓴 이유는
- Math.sqrt(n) % 1 === 0이면 false값
- Math.sqrt(n) % 1 !== 0이면 true가 됩니다.
그래서 Math.sqrt(n) % 1까지만 써주었습니다.
true : n이 양의 정수 x의 제곱이 아니면 -1반환 -> -1
여기는 딱히 쓰말이 없어서 다음으로 넘어가겠습니다.
false : n이 양의 정수 x의 제곱이면 x+1의 제곱 -> Math.pow(Math.sqrt(n)+1, 2)
Math.pow() 함수를 사용하면 제곱한 값을 구할 수 있습니다.
MDN Web Docs
Math.pow() 함수는 base^exponent 처럼 base에 exponent를 제곱한 값을 반환합니다.
문법 : Math.pow(base, exponent)
- base : 밑 값.
- exponent : 밑 을 제곱하기 위해 사용하는 지수.
// Math.pow()함수 예
// 간단한 예
Math.pow(7, 2); // 49
Math.pow(7, 3); // 343
Math.pow(2, 10); // 1024
// 분수 지수
Math.pow(4, 0.5); // 2 (4의 제곱근)
Math.pow(8, 1/3); // 2 (8의 세제곱근)
Math.pow(2, 0.5); // 1.4142135623730951 (2의 제곱근)
Math.pow(2, 1/3); // 1.2599210498948732 (2의 세제곱근)
// 양의 지수
Math.pow(7, -2); // 0.02040816326530612 (1/49)
Math.pow(8, -1/3); // 0.5
// 양의 밑
Math.pow(-7, 2); // 49 (제곱의 결과값은 양수입니다.)
Math.pow(-7, 3); // -343 (세제곱은 음수가 될 수 있습니다.)
Math.pow(-7, 0.5); // NaN (음수는 실제 제곱근을 가지지 않습니다.)
// "짝수"와 "홀수" 근이 서로 가깝게 놓여 있고
// 부동소수점 정밀도의 한계로 인해,
// 밑이 음수이며 지수가 분수라면 언제나 NaN을 반환합니다.
Math.pow(-7, 1/3); // NaN
그래서 Math.pow(Math.sqrt(n)+1, 2) 이렇게 써주었습니다.
여기까지 프로그래머스 정수 제곱근 판별 해결방안에 대해 설명해보았습니다.
'알고리즘🅰 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 짝수와 홀수 (0) | 2022.03.04 |
---|---|
[프로그래머스] 제일 작은 수 제거하기 (0) | 2022.03.03 |
[프로그래머스] 정수 내림차순으로 배치하기 (0) | 2022.03.02 |
[프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2022.03.02 |
[프로그래머스] 자릿수 더하기 (0) | 2022.02.28 |