프로그래머스 JS 코테 | 서울에서 김서방 찾기, 음양 더하기
이번 코테 문제는 거의 자료를 참고하지 않고 내 머릿속에 있는 내용을 바탕으로 구현했다.
심지어 두 문제 다 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 메서드를 사용하게 되어서 좋았다.
한 번에 풀려서 쾌감 있었고 다른 사람들 풀이를 보며 많은 걸 느낀 것 같다.