[Level1] 6. 26 ~ 30
하루 세문제씩 꾸준히 풀기! 였으나 문제가 너무 쉬워서 5개를 풀어보겠다😂
26. 핸드폰 번호 가리기
function solution(phone_number) {
let answer = "";
for (let i = 0; i < phone_number.length - 4; i++) {
answer += "*";
}
for (let i = phone_number.length - 4; i < phone_number.length; i++) {
answer += phone_number[i];
}
return answer;
}
이게 된다는건 아는데 더 효율적인게 있을 것 같은 느낌이다.
정규식을 알면 더 잘 풀수 있을거란 생각이 들었다.
다른 사람 풀이
var result = "*".repeat(s.length - 4) + s.slice(-4);
내가 생각하기에 가장 이상적이 코드같다!
가독성도 좋고 의미도 바로 보이고..완벽!
이런 코드를 구사할 수 있는 실력을 갖고싶다…ㅠㅠ
return s.replace(/\d(?=\d{4})/g, "*");
역시 정규식이 best 일 것 같았다!
주말에 정규식에 대해 자세히 공부해야겠다.!!!
27. 하샤드 수
function solution(x) {
let str = x + "";
let sum = 0;
for (let i = 0; i < str.length; i++) {
sum += parseInt(str[i]);
}
return x % sum ? false : true;
}
best 풀이
return !(n % (n + "").split("").reduce((a, b) => +b + +a ));
split 이 있었구나..!
문자열을 배열로 바꾸는데는 split 도 있다는 것!
console.log("HELLO".split("")) //[ 'H', 'E', 'L', 'L', 'O' ]
28. 평균 구하기
function solution(arr) {
return arr.reduce((current, value) => current+value, 0) / arr.length
}
나도 이번엔 누적합 reduce를 사용했다. 우하하!!
best 풀이와 정확히 일치한다!👍
29. 콜라츠 추측
function solution(num) {
let cnt = 0;
while (num !== 1) {
num = num % 2 ? num * 3 + 1 : num / 2;
cnt++;
if (cnt >= 500) return -1;
}
return cnt;
}
while 활용해서 잘 했다고 생각했는데,,,best는 한줄이다…
best 풀이
function collatz(num,count = 0) {
return num == 1 ? (count >= 500 ? -1 : count) : collatz(num % 2 == 0 ? num / 2 : num * 3 + 1,++count);
}
진짜 사람들 너무 대단하다.
재귀를 이렇게 사용했다.
재귀도 어서 익숙해졌으면 좋겠다.
30. 최대공약수와 최소공배수
function gcf(a, b) {
if (a < b) {
[a, b] = [b, a];
}
if (b === 0) {
return a;
}
return gcf(b, a % b);
}
function solution(n, m) {
let max = gcf(n, m);
return [max, (n * m) / max];
}
최대공약수, 최소공배수 너무 오랜만에들어서 풀이법을 참고하였다.
- 최대공약수 : 유클리드 호제법
- 최소공배수 : a * b / 최대공약수
유클리드 호제법
a > b일 때, a % b = r(나머지가 0이 아닐 때)
b % r =r1(이작업을 반복하여 나머지가 0이 되는 r이 최대공약수)
잊지말자!! 언젠가 또 나올거 같은 느낌이다!😭🤩