CodeStates/JavaScript

Section1 / Unit5 : JS 반복문 & 함수

yeeendy 2023. 4. 20. 11:13

코드스테이츠 8일차!

반복문 코플릿 푸는데 정말 머리가 아찔했다

 

getMaxNumberFromString

 

문제

숫자 문자열을 입력받아 문자열을 구성하는 각 숫자 중 가장 큰 수를 나타내는 숫자를 리턴해야 합니다.

입력

인자 1 : str

  • string 타입의 숫자 문자열

출력

  • string 타입을 리턴해야 합니다.

주의 사항

  • 반복문(for)문을 사용해야 합니다.
  • str.split 사용은 금지됩니다.
  • 빈 문자열을 입력받은 경우, 0을 리턴해야 합니다.

입출력 예시

let output = getMaxNumberFromString('53862');
console.log(output); // --> '8'

output = getMaxNumberFromString('4321');
console.log(output); // --> '4'

reference

function getMaxNumberFromString(str) {
  let maxNum = 0;

  for (let i = 0; i < str.length; i++) {
    if (parseInt(str[i]) > maxNum) {
      maxNum = parseInt(str[i]);
    }
  }

  return String(maxNum);
}

parseInt( ) : 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환

->주요 목적 : 문자열에서 숫자를 추출하기 위함

//예시

let age = parseInt('30');
console.log(age , typeof age);   // 30, number

//문자열이 숫자로 시작하면 숫자만 추출
let str = parseInt('123숫자들');
console.log(str);   // 123

//숫자가 포함된 문자열이라 하더라도 문자로 시작하거나, 아님 숫자를 포함하지 않는 문자열의 경우는 NaN으로 반환
let str = parseInt('숫자들123');
console.log(str);   // NaN

let sing = parseInt('lalala');
console.log(sing);   // NaN

isPrime

문제

1 이상의 자연수를 입력받아 소수(prime number)인지 여부를 리턴해야 합니다.

입력

인자 1 : num

  • number 타입의 수

출력

  • boolean 타입을 리턴해야 합니다.

입출력 예시

let output = isPrime(2);
console.log(output); // --> true

output = isPrime(6);
console.log(output); // --> false

output = isPrime(17);
console.log(output); // --> true

힌트

  • 자바스크립트 내장 객체인 Math를 활용해 불필요한 연산을 줄일 수 있습니다. (javascript square root 또는 자바스크립트 제곱근)

나의 풀이

function isPrime(num) {
  // TODO: 여기에 코드를 작성합니다.
  if(num === 1) return false;
  if(num === 2) return true;
  for(let i = 2; i <=num/2; i++){ //약수는 최대 절반을 넘지 않으므로
    if(num%i === 0){
      return false;
    }
  }return true
}

reference

function isPrime(num) {
  let sqrt = parseInt(Math.sqrt(num));

  if (num === 1) return false;
  if (num === 2) return true;
  if (num % 2 === 0) return false; //짝수

  for (let i = 3; i <= sqrt; i += 2) { //짝수를 배제했으므로 i+=2 사용
    if (num % i === 0) { //나눠지면 소수가 아님
      return false; 
    }
  }
  return true;
}

검색해보니 소수판별하는 방법이 3가지가 있다고 하는데 제곱근 방식은 이해가 잘 안 가서 다른 방법으로 풀었다.

[소수 판별하는 3가지 방법]

1) 직접 나누어서 계산하기

2) N/2 까지만 나누어서 계산하기 (숫자의 약수는 숫자의 절반을 넘지 않는다)

3) N의 제곱근 ( √ ) 까지만 나누어서 계산하기

-->제곱근을 이용해서 푸는 방법은 이러했다. 굳이 num의 제곱근보다 큰 수까지 반복문을 돌릴 필요가 없다고 한다.

-->num의 제곱근보다 작은 수에서 나눠지는 수가 안나온다면 num의 제곱근보다 큰 수에서도 나눠지는 수가 나올 수 없기 때문이다. 


함수 선언문과 함수 표현식은 강의에 있었는데 라이브 세션 때 화살표 함수도 있다고 해서 기록해본다

//예제
const add = (x, y) => x + y;
console.log(add(2, 5));  //7

화살표 함수는 기존의 함수 선언문, 함수 표현식을 완전히 대체하기 위해 디자인된 것은 아니다.

기존의 함수보다 표현만 간략한 것이 아니라 내부 동작 또한 간략화되어 있다.

->생성자 함수로 사용할 수 없다.

->기존 함수와 this 바인딩 방식이 다르다

->prototype 프로퍼티가 없다

->arguments 객체를 생성하지 않는다

 

*생성자 함수 : 객체를 생성하는 함수 (객체 배울 때 더 자세히 알아봐야겠다.)


라이브 세션 때 선생님이 추천해주신 레퍼런스

HTML/CSS
초급: w3school https://www.w3schools.com/html/default.asp
(HTML, CSS는 지금까지 하신 내용 기록만 잘 해놓으셔도 상관없습니다.)
초급: freecodecamp https://www.freecodecamp.org/learn/2022/responsive-web-design/
중고급: mdn, css-tricks
나는 Godlike: Spec (HTML Living Standard)
JavaScript
문제: https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/
개념: https://javascript.info/
중고급: mdn, 모던 자바스크립트 deep dive
나는 Godlike: Spec (EcmaScript)
작은 프로젝트
저희가 드린 것, 레퍼런스 코드 이해 다 하셨죠? 그것 먼저 부탁해요~!
https://github.com/bradtraversy/vanillawebprojects