문제 설명
x
가 하샤드 수이려면 x
의 자릿수의 합으로 x
가 나뉘어져야 한다
- 예를 들어 18의 자릿수 합은 1 + 8 = 9이고, 18은 9로 나뉘어 떨어지므로 18은 하샤드 수이다
- 자연수
x
를 매개변수로 받고 하샤드 수인지 아닌지 검사하는 함수를 작성해야 한다
제한사항
나의 답안
function solution(x) {
let num = x.toString().split('');
let sum = 0;
for (const value of num) {
sum += Number(value);
}
return x % sum === 0 ? true : false;
}
x
의 각 자릿수 분리 후 더한 값을 찾는다 sum
x
가 sum
으로 나누어 떨어지면 true
, 아니면 false
반환
문제 설명
- 길이가 같은 배열
A
, B
두개 있다
- 각 배열에서 한 개의 숫자를 뽑아 두 수를 곱한고, 이 과정을 배열의 길이만큼 반복하며 두 수의 곱한 값을 누적하여 더한다
- 매개변수로 배열
A
, B
가 주어질 때 최종적으로 누적된 최솟값을 반환하는 함수를 작성해야 한다
제한사항
- 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없다
- 각 배열의 크기는 1,000 이하의 자연수
- 각 배열의 원소의 크기는 1,000 이하의 자연수
나의 답안
function solution(A, B) {
let sum = 0;
A.sort((a,b) => a - b);
B.sort((a,b) => b - a);
for(let i = 0; i < A.length; i++) {
sum += A[i] * B[i];
}
return sum;
}
- 최종 누적값이 최솟가 되기 위해서는 큰 숫자와 작은 숫자를 곱해주는 것이 중요하기 때문에
A
는 오름차순으로, B
는 내림차순으로 정렬한다
- 각 배열의 길이는 같다고 문제 설명에 기재되어 있기 때문에 for문의 레인지는
A
나 B
중 더 마음에 드는 배열의 length
로 설정해준다
- 각 인덱스에 해당하는
A
값과 B
값을 곱해주어 누적값sum
에 더하고 반환한다
다른 사람 풀이
function solution(A,B){
A.sort((a, b) => a - b)
B.sort((a, b) => b - a)
return A.reduce((total, val, idx) => total + val * B[idx], 0)
}
- 접근 방식은 나랑 똑같지만 나처럼 반복문을 사용하지 않고 마지막에
reduce
로 마무리 했다
- 간결하다고 무조건 좋은 코드는 아니지만, 간결한 코드를 작성하기 위해서 각 메서드를 확실히 공부하고 자유롭게 활용할 수 있는 것도 중요한 역량인 것 같다
- 최근 reduce, map, filter에 대한 공부를 하고 블로그 글까지도 작성해두었지만, 아직 익숙해지 않아서인지 이번 문제 풀이에는 활용하지 않았다
- 다음부터는 for문으로 풀었더라도 메서드 복습 차원에서 코드를 다시 새롭게 작성해보는 것도 좋은 연습이 될 것 같다
문제 설명
- 괄호가 바르게 짝지어졌다는 것은
(
문자로 열렸으면 반드시 짝지어서 )
문자로 닫혀야 한다는 뜻이다
(
와 )
로만 이루어진 문자열 s
가 매개변수로 주어졌을 때, s
가 올바른 괄호인지 아닌지 판단하는 함수를 작성해야 한다
입출력 예
s | answer |
---|
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
제한 사항
- 문자열
s
의 길이는 100,000이하의 자연수
나의 답안
function solution(s) {
let countA = 0, countB = 0;
if(s[0] === ')') return false;
for(let i = 0; i < s.length; i++) {
if(s[i] === '(') countA++;
else countB++;
}
return countA === countB ? true : false;
}
- 만약 문자열의 첫째 문자가
)
인 경우는 무조건 false
이기 때문에 예외처리를 우선적으로 해주었다
- for-loop을 통해
s
를 순회하며 문자가 )
일 때마다 countA
를 올려주고, 반대로 (
일 때는 countB
를 올려주었다
- for-loop이 끝난 후에는 두 카운트 수가 동일해야 괄호가 짝지어져서 잘 닫혔다는 의미이기 때문에 두 카운트 값을 비교해서 그에 맞는 boolean값을 반환해준다