하고 싶은게 많음

[항해99_JavaScript 문법 종합반] 1주차 - 3 (숙제) 본문

IT/항해99

[항해99_JavaScript 문법 종합반] 1주차 - 3 (숙제)

쏘매띵 2023. 9. 26. 17:41

1. 문자열을 입력받아 P, p의 개수와 Y, y의 개수를 구하여 합계 출력

https://school.programmers.co.kr/learn/courses/30/lessons/12916

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제를 보면서 1) 일단 문자열을 split으로 쪼개서 P와 p, Y와 y의 여부를 확인하고, 2) 확인한 만큼 반복문을 돌려서  3) 돌린 만큼 합계의 변수에 저장해 4) 그걸 갯수가 동일하면 true 아니면 false 반환시키자. 라고 생각했다. 그래서 아래와 같이 코드를 짰는데...

function solution(s) {
    let sSum = 0;
    let ySum = 0;
    let sSplit = s.split("")
    
    for(let i=0; i<sSplit.length+1; i++){
        if(sSplit[i] === "p" || sSplit[i] === "P"){
            sSum++;
        } else if (sSplit[i] === "y" || sSplit[i] === "Y") {
            ySum++;
        }
    }

    if (sSum === ySum) {
        return true;
    } else {
        return false;
    }
}

 

다른 분들이 코드를 짠  걸 보니 내가 만든 코드는 거의 덕지덕지 빈 상자방구들을 모아서 만든거라고 할 수 있었다.

 

 

 

다른 똑똑한 사람들이 만든 코드

천잰가봐...!

소문자를 일괄로 대문자로 바꾸고(toUpperCase() ), P를 기준으로 문자열을 자르고(split("P")) 그 길이를 구한 것과 동일한 과정을 거친 (Y) 것과 비교연산자(===)를 이용해  결과를 반환시켰다. 

length를 이렇게도 쓴다고..? 놀랄 노. length 당신은 대체...!

 

 

 


2. 두 배열을 입력받는다. -> 하나의 배열은 true와 false로 구성되어 있고, true는 +, false는 -로 활용하여  참거짓으로 이루어진 배열의 같은 인덱스의 또 다른 배열에 적용하여 그 배열의 합계를 구하는 문제.

... 아니 대체 무슨 말이냐면 

 

이와 같이 absolutes의 배열과 signs라는 배열을 입력받아 [+4, -7, +12]로 만들고 이 요소들을 다 더해서 9가 되도록 하라는 말. 문제 설명하기도 여간 어려운 것이 아니다!

 

https://school.programmers.co.kr/learn/courses/30/lessons/76501

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이 또한 문제를 보면서 1) signs 배열을 for문 if문으로 true 를 +로, false를 -로 바꾸고 2) absolutes의 배열 각 요소에 map을 이용해서 새로운 배열을 만들고 3) 새로운 absolutes 배열의 요소들을 다 더하는 방법을 생각했었다. 

 

function solution(absolutes, signs) {
    let sum = 0;
    for (let i =0; i<absolutes.length; i++){
        if(signs[i]===true){
            absolutes[i] =  "+" +absolutes[i];
        } else {
            absolutes[i] =  "-" +absolutes[i];
        }
    }
    for (let i =0; i<absolutes.length; i++){
        sum += absolutes[i];
    }
    console.log(sum);

 

결과는 아래와 같이 나와버림. 

 

0+4-7+12
0-1-2+3

 

당연함. +, -도 문자로 들어가서 그냥 문자끼리의 합이 되어버림. Number를 통해 형변화를 시켜줬더니 아래와 같이 값이 나왔다. 

 

9
undefined
0
undefined

 

...뭐가 잘못된것인지....잘못된 방법이었고, 아무리해도 undefined처리가 되었다. 그러던 중 마지막 콘솔로그 아니라 return이 잘못됏다는걸 알고 수정했더니 성공했다...ㅎㅎ

 

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

 

 

일단 강의를 봤는데 세상에나 만상에나. 애초에 접근 방식이 달랐고, 옳은 방법은 1) 반복문으로 signs을 돌리고 2) true면 sum이라는 변수에 absolutes의 값을 더하고, 2) 아니라면(false) 값을 빼면 되는 아주 간단한 방식이었다.

 

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

 

진짜 세상에나 만상에나. 대가리 빡빡 때림.

 

 

 

- 오늘의 다짐: 안풀리는 문제는 시간차를 두고 풀어보자. - 

Comments