코드스테이츠 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
'CodeStates > JavaScript' 카테고리의 다른 글
Section 1 / Unit8 : [JavaScript] 배열 (0) | 2023.04.25 |
---|---|
Section1 / Unit6 : 웹앱 만들기(계산기 구현하기) (0) | 2023.04.21 |
Section1 / Unit5 : JS 조건문 (0) | 2023.04.19 |
Section1 / Unit5 : JS (0) | 2023.04.18 |
Section1 / Unit4 : 복습&계산기 목업 만들기 (0) | 2023.04.17 |