상세 컨텐츠

본문 제목

프로그래머 도전기 34일차

프로그래머가 될거야!

by Choyee 2023. 10. 1. 23:58

본문

오늘은

오늘은 주말이었습니다 

저녁에는 친구와의 약속이 있어서

그전까지 최대한 공부를 해놓고 가려고 했습니다

JavaScript 강의를 듣고, 코딩테스트도 몇 문제 풀었네요

내일을 월요일이니 더 열심히 해야겠습니다

 

 

JavaScript 공부

<범위>
범위 -> 변수 가시성을 참조
변수를 javaScript가 어느 부분에 정의하느냐가 액세스 지점을 결정한다

함수 안에서의 변수의 범위
= 범위가 블록으로 지정되는 변수들 => 유효 범위 규칙을 따르는 변수들을 추가하기 위한 것
= 변수의 범위가 함수로 지정되는 함수 범위

함수 안과 밖에 동시에 변수가 존재하더라도
함수 내에서는 가장 가까운 변수를 사용하게 된다

블록 범위
함수 안에서의 변수의 범위와 비슷한 개념
함수 자리에 함수 대신 블록이 들어가는 것
함수가 아니라 조건문과 루프 같은 것이 나올 뿐

렉시컬(lexical) 범위
부모 함수의 안에 중첩된 내부 함수 => 해당 외부 함수의 범위 또는 외부 함수 내에서 정의된 변수에 액세스 할 수 있다
원하는 경우 추가로 더 중첩을 시킬 수도 있다
= 중첩된 함수나 내부 함수는 상위 몇 레벨 위에 있든 상관 없이
  부모 함수나 조부모 함수 등이 액세스하는 동일한 항목에 액세스할 수 있다
   => 역방향으로는 성립하지 않는다


<함수 표현식>

const add = function(x,y){
    retrun x + y;
}


변수 선언 = 함수 ( ) { }

함수를 실행하는 구문은 같지만
원래는 함수의 이름을 사용하는데 
이번에는 함수의 이름이 아닌 변수의 이름을 사용한다(ex. const add)
엄밀히 말하면 add 변수안에 함수가 있고 그 함수는 이름이 없다. 내부적으로는 객체인 것
=> 함수를 정의하는 또 하나의 구문이고 변수에 저장될 뿐인 것
=> 함수도 저장하고 전달할 수 있게 되는 것 = 값의 하나로 간주
=> 함수를 인수로 전달할 수도 있고, 반환 값으로 반환할 수도 있다


<고차 함수>
= 다른 함수와 함께 작동하거나, 다른 함수에서 작동하는 함수
=> 다른 함수를 인수로 받아서 그 인수로 어떤 작업을 하는 함수이자 함수를 반환할 수 있는 함수

ex> function callTenTimes(f) {
            for (let i = 0; i < 10; i++) {
                 f()
            }
       }
       
       function rollDie() {
           const roll = Math.floor(Mtah.random() * 6) + 1
           console.log(roll)
       }

       console => callTenTimes(rolDie) => 주사위를 열 번 굴린 결과가 출력된다


<반환 함수>
= 함수 내에서 함수를 값으로 반환하는 것
=> 함수는 일반적인 값으로 취급돼서 함수가 반환되든 인수로 전달되든
     그 함수를 전달할 수 있음
=> 팩토리 함수 = 함수를 만들어주는 함수

ex> fuction makeBetweenFunc(min, max) {
          return function(num) {
                return num >= min && num <= max;
          }
      }
    => const isChild = makeBetweenFunc(0, 18)
         -> isChild(40) 입력 => false 값 반환
         -> isChild(7) 입력 => true 값 반환
    => const isAdult = makeBetweenFunc(18, 64)
    => const isSenior = makeBetwwenFunc(65, 120)



<메서드 만들기>
메서드 = 객체에 종속된 특성 -> 함수에 포함되는 개념
모든 메서드 = 함수 O / 모든 함수 = 메서드 X
메서드 이름 앞에 점을 찍어서 사용
메서드 = 객체에 -> 특성으로 추가된 -> 함수

ex> const myMath = {
            PI: 3.14159,
            square(num) {
                 return num * num;
            },
            cube(num) {
                 return num ** 3;
            }
       } square나 cube 는 객체 안에 있기 때문에 ','쉼표로 구분을 해주어야 한다

 

 

 

Coding Test Practice
Description
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
function solution(numbers) {
    var answer = [];
    
    //원소 중 두 개를 곱해 만들 수 있는 최댓값을 반환
    //최댓값 반환
    //두 원소를 곱한 값 비교
    for(var i = 0; i < numbers.length -1; i++){
        for(var j = i+1; j < numbers.length; j++){
            answer.push(numbers[i]*numbers[j]);
        }
    }
    return Math.max(...answer);
}

전개 연산자 (spread operator) '...' = 배열이나 객체 내의 요소를 개별적으로 추출하거나 전개할 때 사용
Math.max 함수에 answer 배열의 모든 요소를 전개하여 전달 => Math.max 함수는 전달된 모든 값 중에서 

                                                                                                      가장 큰 값을 반환

 

Description
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
function solution(my_string) {
    var answer = [];
    for(var i = 0; i < my_string.length; i++){
        if(isNaN(my_string[i]) == false){
            answer.push(Number(my_string[i]));
        }
    }
    return answer.sort();
}

isNaN(value) = 파라미터가 숫자가 아닐 경우 true를 리턴하고, 파라미터가 숫자일 경우 false를 리턴

 

Description
머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.
function solution(box, n) {
    return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n);
}

 

 

Description
정수 배열 array가 매개변수로 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 return 하도록 solution 함수를 완성해보세요.
function solution(array) {
    var answer = [];
    var MaxNum = Math.max(...array)
    answer.push(MaxNum)
    answer.push(array.indexOf(MaxNum))
    return answer;
}

 

 

Description
문자열 myString이 주어집니다. myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요
function solution(myString) {
    var answer = [];
    myString = myString.split('x')
    for(var i = 0; i < myString.length; i++){
        answer.push(myString[i].length);
    }
    return answer;
}

split() 함수 = 특정 구분자를 기준으로 문자열을 분리하여 결과를 배열로 반환

 

 

 

 

2023. 10. 01 (일)

관련글 더보기