점의 위치 구하기 (삼항연산자)
function solution(dot) {
const x = dot[0];
const y = dot[1];
return x>0 && y>0 ? 1 : x<0 && y>0 ? 2 : x<0 && y<0 ? 3 : 4;
}
나는 삼항 연산자와 and 연산자를 사용했는데,
and 연산자를 사용하지 않고 코드를 작성하신 분도 있었다.
function solution(dot) {
return dot[0] > 0 ? dot[1] > 0 ? 1 : 4 : dot[1] > 0 ? 2 : 3;
}
삼항 연산자를 이렇게도 쓸 수 있구나😮 또 하나 배워간다. 이 코드로 실행하면 속도도 빨라진다!
홀수 오름차순 배열
function solution(n) {
const answer = [...Array(n+1).keys()].filter(even => even%2 !== 0 );
return answer;
}
배열을 만들고 filter로 짝수를 제외시켜줬다.
자릿수 더하기
정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요.
ex) n = 1234 👉 1+2+3+4 = 10
function solution(n) {
let answer = Array.from(String(n),Number).reduce((x, y) => x+y, 0) ;
return answer;
}
Array.from
을 사용하여 (String)문자열로 변환 후, 붙어있는 문자열을 하나씩 자르고, (Number)다시 숫자로 만든 다음, reduce로 배열의 합을 구해줬다.
짝수와 홀수 개수 각각 알아내기
정수가 담긴 리스트 num_list가 주어질 때,
num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록
solution 함수를 완성해보세요.
function solution(num_list) {
const even = num_list.filter(even => even%2 === 0).length;
const odd = num_list.length - even;
return [even, odd];
}
먼저 filter로 짝수 배열의 길이를 구했다.
홀수 개수는 원래 배열의 길이에다가 짝수의 개수를 빼줌으로써 알아냈다.
약수의 합
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
ex) 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.
function solution(n) {
return [...Array(n+1).keys()].reduce((x,y) => x+(!(n%y) && y));
}
stackoverflow 설명 (여기서 a는 위 코드 y와 같다)
!(n % a) this returns true only for the elements that have a 0 as modular value.
(!(n % a) && a) is a js ‘trick’.
The case is that boolean expressions in javascript don’t return true or false.
They return a ‘truthy’ or ‘falsy’ value which is then converted to boolean.
So the actual returned value is the right value for && (considering both have to be truthy)
and the first thuthy value found for || (considering only one need to be truthy).
So this basically means: if a is a modular value
(i.e. != 0) return a to add to the sum, else return 0.
stackoverflow
의 도움을 받아 풀었는데, 풀고 나니 더 좋은 풀이법이 있었다.
function solution(num) {
let sum = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) sum += i
}
return sum
}
배열을 만들 필요가 없으니 속도가 엄청 줄어들었다!
문자열 뒤집기
function solution(my_string) {
return my_string.split("").reverse().join("");
}
split을 이용해 “” 형태로 하나씩 자르고, reverse로 뒤집어준 뒤,
join을 이용해 “” 안에 하나로 합쳐주었다.(=하나의 문자열로 만들었다)
아래와 같은 방법도 있었는데,
function solution(my_string) {
return = [...my_string].reverse().join("");
}
코드의 길이는 더 짧지만 시간이 더 오래 걸렸다.
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges