devlog of ShinJe Kim

[javascript] 프로그래머스|Level1|약수의 합

|

문제 설명 자연수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

제한 조건 n은 0 이상 3000이하인 자연수입니다.

나의 풀이

function solution(n) {
    var answer = 0;

    if(n<0 || n>3001){
        return false;
    }

    for(var i=0; i<=n; i++){
        if(n%i === 0){
            answer += i;
        }
    }
    return answer;
}

n이 0 미만이거나 3000 초과일 경우 false를 반환하도록 했다. 그리고 어떠한 수를 약수로 나누었을때 그 나머지가 0이라는 것을 활용하여 풀었다.

[JavaScript] 프로그래머스|Level1|짝수와 홀수

|

문제 설명 정수 num이 짝수일 경우 Even을 반환하고 홀수인 경우 Odd를 반환하는 함수, solution을 완성해주세요.

제한 조건 num은 int 범위의 정수이며 0은 짝수입니다.

나의 풀이

function solution(num) {
    var answer = '';
    return (num%2 === 0) ? answer = 'Even' : answer = 'Odd';
}

다른 사람의 풀이

function solution(num) {
    return num % 2 ? "Odd" : "Even";
}


0이 false라는 것을 활용하여 굳이 num%2 === 0 이라는 것을 기입하지 않고도 깔끔하게 풀어낸 코드가 있었다. 다음부턴 무작정 풀기 전에 어떻게 하면 불필요한 부분을 줄이고 가독성있는 알고리즘을 짤지에 대해 조금 더 고민해보아야겠다.

[JavaScript] 프로그래머스|Level1|수박수박수박수박수박수?

|

문제 설명 길이가 n이고, 수박수박수박수….와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 수박수박을 리턴하고 3이라면 수박수를 리턴하면 됩니다.

제한 조건 n은 길이 10,000이하인 자연수입니다.

나의 풀이

function solution(n) {
    if(n>10000) {
        return false;
    }else{
      var answer = '';
        for(var i=1; i<=n; i++){
            (i%2 ==0) ? answer += '박' : answer+= '수';
        }
        return answer;
    }
}

다른 사람의 풀이

const solution = n => {
    return '수박'.repeat(n/2) + (n%2 === 1 ? '수' : '');
}


나는 단순하게 생각하여 홀수이면 ‘수’를 짝수이면 ‘박’을 결과 스트링에 붙이는 방법으로 풀었다. 그런데 제한 조건을 반영하려면 길이 10,000을 초과하는 수는 들어오지 못하게 막아야 할 것 같은데 다른 사람들의 풀이를 보니 그런 부분을 작성한 코드는 없었다. 내가 잘못 이해한건가..?ㅜ 대부분 repeat 함수를 사용하였는데, 내가 거의 10줄로 표현한 코드를 단 한줄로 표현한 코드가 있었다. 나도 익혀서 내것으로 만들도록 노력해야겠다.

[JavaScript] 기본 내용 정리-(2)

|

배열

값을 저장할 수 있는 엘리먼트(변수)의 연속된 공간을 의미한다. 주소(index)를 이용해 각 엘리먼트에 접근 가능함.

배열 정의 방법

  • 빈 배열    ex)var arr = [];
  • 초기화    ex)var arr = [1, 2, 3];
  • 어떤 자료형이든 저장이 가능함
  • 배열 길이 반환    arr.length
  • 접근    arr[index]

배열 사용하기

  1. 배열에 엘리먼트 추가하기
    • .push(element): 배열 뒤에 element 추가
    • .pop(): 배열 뒤에서 엘리먼트 삭제 후 리턴
    • .shift(): 배열 앞에서 엘리먼트 삭제 후 리턴
    • .unshift(element): 배열 앞에 엘리먼트 추가
  2. 배열 붙이기, 검색하기
    • arr1.concat(arr2): arr1과 arr2를 붙임
    • arr.indexOf(element): arr에서 element가 있는 첫 위치를 검색함
    • arr.lastIndexOf(element): arr에서 element가 있는 마지막 위치를 검색함
  3. 문자열 split 함수 문자열을 구분자(separator)로 나눠서 각각을 담은 배열을 반환하는 함수

변수의 scope

  • 선언한 변수가 유효한 지역을 의미.
  • function scope
    • 선언된 변수는 선언된 함수 안에서만 접근이 가능함
    • 선언된 함수 안에서 선언된 함수(nested function)에서도 접근이 가능함

변수의 shadowing

  1. 함수 밖에서 선언된 같은 이름의 변수를 함수 안에서도 사용할 때
    • 함수 밖의 변수는 잠시 가려짐
    • 함수 안에서는 해당 함수에서의 변수를 사용함(함수 밖 변수의 값은 변하지 않음)
    • 함수에서 빠져나오면 다시 해당 변수에 접근할 수 있음
  2. 함수 안에서만 값이 유지되어야 하는 경우
    • 함수 안에서 var 키워드를 사용해서 선언한 뒤 사용
  3. 여러 함수에서 값이 유지되고 사용되어야 할 때
    • 전역 변수를 사용

[JavaScript] 기본 내용 정리-(1)

|

object 객체 속성 접근 방법

var human = {age: 20, nationality: korea}

  1. 객체이름.속성이름 => human.age = 20

  2. 객체이름[“속성이름”] => human[“age”] = 20

Math 관련 명령어

  • Math.pow(A, b): A의 b승을 구함
  • Math.sqrt(A): A의 제곱근을 구함
  • Math.random(): 0~1 사이의 임의의 난수 발생

문자열 다루기

  1. 문자열 길이 알아내기 => string.length

  2. 문자열 붙이기
    • concat ex) str1.concat(str2)

    • (+) 연산자 ex) str1 + str2

  3. 특정 위치 문자열 알아내기
    • .chatAt 첫문자 가져올때: str.charAt(0) 마지막 문자 가져올때: str.charAt(str.length-1)

    • 대괄호([]) 첫문자 가져올때: str[0] 마지막 문자 가져올때: str[str.length - 1]

  4. 부분 문자열 구하기(대상 문자열의 연속된 일부 가져오기)
    • .substring(position1, position2) position1 ~ position2 까지의 문자열을 반환하며, position2 생략시 문자열 끝까지 반환

    • .substr(position, length) position에서부터 length 길이만큼의 문자열을 반환함. position이 음수인 경우, str.length - position 으로 동작함.

  5. 문자열 검색
    • indexOf(str)
    • lastIndexOf(str)