윤년의 조건은 4의 배수이되, 100의 배수가 아니거나 400의 배수일 때 윤년이라고 한다. input의 값이 윤년인지 아닌지 판별하는 쉬운 문제였는데, 내가 처음에 코드를 바보 같이 짰다.
if ( input == 4n && input !== 100n) {}
else if (input == 400n) {}
이런식으로 짠것이다. 정말 저렇게 쓰면 배수가 맞는지 확인은 할 수 있는거 맞나..?1차원적으로 생각했다.
결론으로는
if ( input % 4 == 0 && input % 100 !== 0 ) {}
else if (input % 400 == 0 ) {}
이런식으로 나머지가 0인지 아닌지로 배수를 알아 볼 수 있다.
요일 구하기는 input으로 받은 정보가 2021-01-27 이다. 이걸 Date()
로 받은 뒤 getDay()
를 통해 요일을 알아낸다. 이때 요일은 일요일이 0 토요일이 6인 숫자들로 반환되므로 이것에 대응할 배열을 미리 만들어놓으면 된다. 사실 Date()
와 getDay()
만 알면 매우 쉬운 문제이기도 하고, 가끔 요일을 활용한 문제가 나오니 잊지 않게 복습만 해두면 될 듯 하다.
단어들을 배열로 받은 뒤 그 중에서 중복인 단어를 없애는 것이다. 이 문제는 for문
을 통해서도 가능하지만 그래도 set
을 이용하면 O(1)로 처리할 수 있다. set
객체는 자료형에 관계 없이 모두 유일한 값만 저장할 수 있기 때문에 중복을 처리할 때 유용한다.
스팸메일로 설정된 단어를 포함한 input값을 걸러내는 문제이다. 이 문제는 string으로 input을 받기 때문에 String.prototype.includes()을 이용하여 true
, false
로 출력할 수 있다.
includes()
는 string과 array에서 모두 쓸 수 있는 메서드이기 때문에 기억해둬야겠다.
input으로 받은 배열들을 다시 역순으로 출력하는 문제이다. 사실 for문
과 unshift()
를 써서 풀수도 있지만 swap 을 활용하여 for문
을 도는 값을 반으로 줄일 수도 있다. (똑똑한 사람이 너무 많다..)
function answer(user) {
let reverse = [];
let tmp;
for (let i = 0; i < user.length / 2; i++) {
tmp = user[i];
user[i] = user[user.length - 1 - i];
user[user.length - 1 - i] = tmp;
}
reverse = user;
return reverse;
}
첫번째 값과 마지막 값을 바꾸고, 두번째 값과 세번째 값을 바꾸면 역순이 된다. 이거보고 진짜 놀랐다..이런 코드를 짤 수 있는 사람이 되고싶다 ^^
영어 문장을 input으로 받은 뒤, 각 단어의 첫글자를 대문자로 바꾼뒤 다시 출력하는 문제이다. 먼저 문장의 각 단어들을 분리해야하는데, split()
이용하면 각 단어를 분리할 수 있고, 그 각 단어에 대한 처리(대문자로 바꾸는 것)은 for...of
를 통해 처리할 수 있다.
function answer(str) {
let fix_str = "";
for (let item of str.split(" ")) {
fix_str += item[0].toUpperCase() + item.slice(1) + " ";
}
return fix_str;
}
1차원의 배열값들을 곱셈할 때는 for문
을 arr.length만큼 돌리고 arr[i]하나만 신경쓰면 되지만, 2차원 배열 안에 있는 값들을 곱할 때는 arr[i][j] 이런 식으로 두 개를 신경 써야한다. i 는 arr.length만큼 돌리면 되지만 j의 조건은 arr[i].length로 바꿔줘야한다. 그래야 arr[i]에 있는 갯수만큼 [j]를 돌릴 수 있기 때문이다.
function answer(arr) {
let product = 1;
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
product *= arr[i][j];
}
}
return product;
}