코딩 테스트 in JS

프로그래머스 JS 코테 | 서울에서 김서방 찾기, 음양 더하기

바닷가쟤 2023. 8. 28. 11:56

이번 코테 문제는 거의 자료를 참고하지 않고 내 머릿속에 있는 내용을 바탕으로 구현했다.

심지어 두 문제 다 1트만에 빠르게 성공 !

저번보다 공부 효율/만족도가 크다.


Lv.1 서울에서 김서방 찾기

서울에서 김서방 찾기

1트 성공

indexOf를 사용해도 된다. → indexOf(”Kim”)

findIndex는 ES6의 새 문법으로 콜백함수를 써야 한다.

function solution(seoul){
    const answer = seoul.findIndex(el => el === "Kim")
    return `김서방은 ${answer}에 있다`;
}

Lv.1 음양 더하기

음양 더하기

if (signs[i]) {
        return absolutes[i]
    } else {
        return absolutes[i] * -1
    }

for 문으로 i를 돌리고 이런식으로 숫자를 구해서 더하려고 한다.

배열에 넣어서 더하면 되겠지..? → reduce 써도 될 듯

function solution(absolutes, signs) {
    const arr = []
    for(let i = 0; i <= absolutes.length - 1; i++){
        if(signs[i]) {
            arr.push(absolutes[i])
        } else {사
            arr.push(absolutes[i] * -1)
        }
    }
    return arr
}

일단 여기까지 하는데는 성공했다.

i <= absolutes.length - 1 를 해주는 이유는

0부터 시작하니까 배열 길이가 3이면 0, 1, 2, 3까지 총 4개가 반환되어서 마지막 값이 null이 들어간다.

그래서 -1로 배열 길이 3이면 2로 해 줘야 0, 1, 2로 총 3개가 반환된다.

 

이제 배열 안의 숫자를 더하면 된다.

function solution(absolutes, signs) {
    const arr = []
    for(let i = 0; i <= absolutes.length - 1; i++){
        if(signs[i]) {
            arr.push(absolutes[i])
        } else {
            arr.push(absolutes[i] * -1)
        }
    }
    const sum = arr.reduce((acc, cur) => {
        return acc + cur // return 해줘야 함
    }, 0)
    return sum // 최종 값 출력
}

테스트 케이스 통과 !

sum 이라는 새로운 변수에서 arr를 활용해야 한다.

그리고, reduce메서드는 내부에서 return 을 해 주고 최종 값(sum)을 리턴 해줘야 한다.

 

다른 사람 풀이

function solution(absolutes, signs) {

    return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}

미쳣다..

absolute배열 자체를 reduce로 돌리는데, acc(누적 값) + (현재 값)을 더한다….

val 에 signs[i]를 곱하는데 삼항 연산자로 signs가 true이면 1을 곱하고 false면 -1를 곱한다.

세 번째 인수 i는 for문의 역할을 해버렸다…. (근데 reduce보다 for문이 빠르다고 한다. 성능을 생각하면서 짜라고 댓글에..ㅎ)

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

이것도 미쳤다…

+=와 -=를 사용해서…

이걸 보고 든 생각은 reduce 메서드와 for문을 동시에 사용하지 않았다….

이 사람은 for문만 사용했고 위 사람은 reduce만 사용했네…

나는 둘 다 같이 사용했는데… 중복 사용하지 않도록 신경 써야겠다.

 

내 풀이 수정

앞으로 if문이 true/false가 단순하고 return 내용이 길지 않으면 삼항 연산자를 잘 사용해야겠다고 생각했다.

function solution(absolutes, signs) {
    const arr = []
    for(let i = 0; i <= absolutes.length - 1; i++){
        signs[i] 
            ? arr.push(absolutes[i]) 
            : arr.push(absolutes[i] * -1)
    }
    const sum = arr.reduce((acc, cur) => {
        return acc + cur
    }, 0)
    return sum
}

이렇게 고쳐줬다.

 

이번 풀이를 통해 안 써봤던 reduce 메서드를 사용하게 되어서 좋았다.

한 번에 풀려서 쾌감 있었고 다른 사람들 풀이를 보며 많은 걸 느낀 것 같다.


 

728x90