- 오늘 풀고 있는 문제 중에 벨로깅이 필요한 문제가 너무 많아서 나워서 올린당....지친다ㅏ..
<오늘의 문제>
- 정수 제곱근 판별 1레벨
- 정수 내림차순으로 배치하기 1레벨
- 하샤드 수 1레벨
1. 정수 제곱근 판별
function solution(n) {
var answer = 0;
sqrt = Math.sqrt(n);
if (sqrt % 1 !== 0) {
answer = -1;
} else {
answer = Math.pow(sqrt + 1, 2);
}
return answer;
}
- 나의 풀이
: 제곱근이나 제곱이나 갑자기 기억도안나고 자꾸만 헷갈려서 죽는줄 알았다;;;
개념정리를 하고 문제풀이를 진행했고, 제곱에 관련된 메서드를 찾아서 정리했다.
Math.sqrt(n) : 숫자 n의 제곱근을 반환.
Math.pow(base, exponent) : base에 exponent를 제곱한 값을 반환.
제곱근을 1로 나눈값이 0이어야 정수가 되는것도 골머리 아팠다 ㅋ 너무멍청하다 ㅋㅋㅋ
function solution(n) {
return Math.sqrt(n) % 1 !== 0 ? -1 : Math.pow(Math.sqrt(n) + 1, 2);
}
- 나의 풀이
: 처음 풀 때부터 삼항연산자가 떠올랐다 ! ㅎㅎㅎ
2. 정수 내림차순으로 배치하기
function solution(n) {
var answer = 0;
answer = parseInt(n.toString().split('').sort((a, b) => b - a).join(''));
return answer;
}
- 나의 풀이
: 정수를 매개변수로 사용하는 것이기 때문에 문자열의 차순용인 sort()
를 사용할수 없어서 paraseInt()
로 전체적을 바꿔준 것이고,
괄호 안에서는 문자형으로 계산된다. join()
은 split()
으로 분리된 문자열을 붙어주는 역할
.toString()
대신 (n + "") + 연산자로 문자형으로 변환 가능 ! 마지막에 * 1를 함으로써 숫자형으로 형변환!
function solution(n) {
var nums =[];
do{
nums.push(n % 10);
n = Math.floor(n / 10);
} while(n > 0)
return nums.sort((a, b) => b - a).join('') * 1;
- 🌟나에겐 참신했던 다른 사람 풀이🌟
: 이렇게 숫자형으로 풀이한게 실행속도가 더 빠르다고한다. 정수를 10으로 나눈값에 floor()
로 소수점을 버린값이 do 로 인해
먼저 실행되서 n값에 들어간다. 그 값을 내림차순하고 아직 문자열인 값에 * 1 를 해서 숫자형으로 변환해준다 !
완전한 이해는 되지않아서 나중에 다시 내용을 추가해야겠다 ㅜㅜ
3. 하샤드 수
function solution(x) {
var sum = 0;
y = x.toString().split('');
for(let i = 0; i < y.length; i++) {
sum = sum + parseInt(y[i])
} if (x % sum == 0) {
return true;
} else {
return false;
}
}
- 나의 풀이
: 처음부터 변수를 하나 선언 할당할 때 문자형변환, 분리를 하고 sum를 사용할거라 0으로 값을 선언해뒀다. split은 없어도 작동이되넹?? why?
문자형이니 length 값 아래로 조건식을 적고, 각각의 인덱스값의 문자를 숫자형으로 변환하였다.
return 값은 개인적으로 if else가 더 가독성이 좋아서 저렇게 작성했다.