[코딩테스트] Level1. 정수 제곱근 판별

정수 제곱근 판별

✍ 문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

✍ 제한사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

✍ 입출력 예

Nanswer
121144
3-1

✍ 입출력 예 설명

  • 입출력 예#1
    121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

  • 입출력 예#2
    3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

❓ 제곱근을 구한 후 삼항연산자로 n이양의정수x의제곱이라면(조건) ? (참)x+1의 제곱을 리턴 : (거짓)-1을 리턴

// ( solution.js )
function solution(n){
  // n이 121일 경우
  var answer = 0;
  
  // 제곱근구하기
  var x = Math.sqrt(n);
  console.log(x); // 11
  
  answer = Number.isInteger(x) ? Math.pow(x+1, 2) : -1;
  console.log(answer);
  
  return answer;
}

❓ ... : 전개연산자 => arr앞에 ...을 사용해야 Math.min()사용가능

...(전개연산자, Spread 문법)

변수 = [...변수명]

  • 전개 연산자는 배열의 요소나 객체를 나열해주는 연산자이다.
  • 배열이나 객체의 복사본(원본에 영향을 미치지 않는다)을 만들 수 있으면서 여러개의 배열이나 객체를 손쉽게 합칠 수도 있고, 함수의 매개변수나 인자 값으로도 사용이 가능하다.

1. 배열에서의 전개연산자 사용

① 배열복사

  • arr배열의 값을 전개하여 copyArr변수에 저장되어서 출력했을 때의 값은 같지만 둘의 주소값은 다르므로 다른 변수이다.
let arr = [1,2,3,4,5];
let copyArr = [...arr];

console.log(arr, copayArr); // [1,2,3,4,5] [1,2,3,4,5]
console.log(arr === copyArr); // false

② 배열 병합

  • 전개연산자를 사용하여 두 배열을 쉽게 병합할 수 있다.
let leftArr = [1,2,3,4,5];
let rightArr = [6,7,8,9,10];

let arr = [...leftArr, ...rightArr];

console.log(arr); // [1,2,3,4,5,6,7,8,9,10];

leftArr.push(...rightArr);
console.log(leftArr); // [1,2,3,4,5,6,7,8,9,10];

③ 함수의 인자값으로 전개연산자 사용

  • sum함수에 3개의 매개변수(a, b, c)가 있는데
    전개연산자 미사용시 : arr배열의 인덱스를 이용해 각각의 매개변수에 집어넣는다.
    전개연산자 사용시 : arr배열의 요소를 나열해 각각의 매개변수에 자동으로 들어간다.
let sum = function(a, b, c){
  return a+b+c;
}
let arr = [1,10,100];

// 전개 연산자 미사용시
console.log(sum(arr[0], arr[1], arr[2])); // 111
// 전개 연산자 사용시
console.log(sum(...arr)); // 111

④ 함수의 매개변수로 전개연산자 사용

let sum = function(...arr){
  let result = 0;
  for ( i of [...arr]){
    result += i;
  }
  return result;
  
  console.log(sum(1, 100, 1000)); // 1101
  console.log(sum(1,2,3,4,5,6,7,8,9,10)); // 55
}

2. 객체에서 전개연산자 이용

① 객체복사(1)

  • Person객체의 내용을 전개하여 otherPerson인 변수에 저장하였다. 출력했을때 값은 같지만 둘의 주소값은 다르므로 다른객체로 취급한다.
let Person = {
  name : "KimHyeonJu",
  from : "Korea",
  language : "JavaScript",
};
let otherPerson = {...Person};

console.log(Person); // { name: "KimHyeonJu", from: "Korea", language: "Javascript" }
console.log(otherPerson); // { name: "KimHyeonJu", from: "Korea", language: "Javascript" }
console.log(Person === otherPerson); // false

② 객체복사(2)

let Person = {
  name : "KimHyeonJu",
  from : "Korea",
  language : "JavaScript",
};
let otherPerson = {
  ...Person,
  age : 28
};
console.log(otherPerson); // { name: "KimHyeonJu", from: "Korea", language: "Javascript", age: 28 }

③ 객체병합

let Person = {
  name : "KimHyeonJu",
  age : 28
}
let language = {
  language : "JavaScript"
}
let sum = {...Person, ...language};

console.log(sum); // { name: "KimHyeonJu", age: 28, language: "JavaScript" }

❓ Math.min() : 가장 작은 수(최소값)을 구한다.

Math.max() , Math.min()

Math.max([숫자집합]) : 입력값으로 받은 0개 이상의 숫자 중 가장 큰 숫자를 반환한다.
Math.min([숫자집합]) : 입력값으로 받은 0개 이상의 숫자 중 가장 작은 숫자를 반환한다.

var maxValue = Math.max(-5,0,5,10);
console.log(maxValue); // 10

var minValue = Math.min(-5,0,5,10);
console.log(minValue); // -5


❓ arr.indexOf() : 가장 작은 수가 arr의 몇번째 index에 있는지 구한다.

❓ arr.splice(index, 1) : arr의 가장 작은 수가 있는 index로 부터 한 개의 요소만 삭제하는 것으로 가장 작은 수를 삭제한다.

좋은 웹페이지 즐겨찾기