TIL_2023.05.22

이얏호·2023년 5월 23일
0
post-custom-banner

자바스크립트(JS)기초 공부

강의 과제로 프로그래머스 문제가 출제되었다.
https://school.programmers.co.kr/learn/courses/30/lessons/12916

우선 변수 두 개를 지정해주고,
대소문자의 구분이 없기에 toLowerCase()를 활용하여 소문자로 일치시켜준 후
반복문을 돌려서 'p'일 경우 첫 번째 변수에 +1
'y'일 경우 두 번째 변수에 +1을 하여
해당 값을 비교하는 방식을 취했다.

var num1 = 0;
var num2 = 0;

function homework(a) {
    a = a.toLowerCase()
    for (let i = 0; i < a.length; i++) {
        if (a[i] == 'p') {
            num1++
        } else if (a[i] == 'y') {
            num2++
        }
    }
    if (num1 === num2) {
        return true
    } else if (num1 === 0 && num2 === 0) {
        return true
    } else {
        return false
    }
}
console.log(homework("pPoooyY"))

num1과 num2 값을 각각 취하여 비교를 하는 과정에서 if, else if, else문이 사용 되었고
전체적으로 코드가 길어졌다.

강의에서 제공한 솔루션에서는

function solution1(s) {
    var result = true;
    s = s.toUpperCase();
    var num = 0;
    for (var i = 0; i < s.length; i++) {
        if (s[i] === 'P') num++;
        if (s[i] === 'Y') num--;
    }
    result = (num === 0);

    return result;
}

console.log(solution1("pPoooyY"))

num 변수 하나를 사용하여 'p'일 경우 ++ 'y'일 경우 --를 통하여
깔끔하게 true, false 값을 구분해냈다.

문제에 텍스트에 너무 집착하지 말고, 코드를 간결화 하는 방법에 대해서 생각을 해보았다.

https://school.programmers.co.kr/learn/courses/30/lessons/76501
두 번째 문제이다.

signs 배열에서 true는 양수, false는 음수를 의미하기에
반복문을 돌리면서 signs 배열의 값들을 비교해서
absolutes 배열의 값을 더하거나 빼주어 해결.

var num = 0;

function homework2(absolutes, signs) {
    for (let i = 0; i < absolutes.length; i++) {
        if (signs[i] === true) {
            num += absolutes[i]
        } else {
            num -= absolutes[i]
        }
    }
    return num
}

console.log(homework2([1, 2, 3], [false, false, true]))

위의 코드 역시 for문 안에 if / else가 들어가서 코드가 길어졌다.

sings 배열은 boolean만 들어있는 배열이므로
아래와 같이 간결하게 적을 수 있었다.

var num = 0;

function homework2(absolutes, signs) {
    for (let i = 0; i < absolutes.length; i++) {
        signs[i] ? num += absolutes[i] : num -= abolutes[i]
    }
    return num
}

console.log(homework2([1, 2, 3], [false, false, true]))
profile
열심히 신나게 화이팅!
post-custom-banner

0개의 댓글