코로 넘어져도 헤딩만 하면 그만

JS 프로그래머스 (입문) 12-14일차 본문

JavaScript/프로그래머스 문제풀이

JS 프로그래머스 (입문) 12-14일차

꼬드리 2024. 7. 17. 14:28

💡모음 제거하기

function solution(my_string) {
  return my_string.split('').filter(char => !'aeiou'.includes(char)).join('');
}

!'aeiou'를 통해 char이 모음 리스트에 포함되지 않는 경우에만 filter한 뒤 join으로 문자열화 시켜 묶어준다. 

아래와 같이 replace()와 정규 표현식으로 사용할 수도 있다. 

 

tip: replace() 메서드는 pattern의 단일, 일부 혹은 모든 일치 항목이 replacement로 대치된 새 문자열을 반환한다.

function solution(my_string) {
    return my_string.replace(/[aeiou]/g, '');
}

 

 

💡숨어있는 숫자의 덧셈

function solution(my_string) {
    let answer = 0;
    const array = my_string.split("");
    for(let i=0; i< array.length; i++){
            if(!isNaN(array[i])){
            answer = answer + Number(array[i])
        }
    }    
    return answer;
}

!isNaN으로 숫자의 여부를 판단한다. 덧셈을 하기 전에는 Number()로 다시 숫자로 바꿔야 한다.

 

 

💡소인수분해

소인수분해는 총 세 가지 조건을 갖고 판별한다. 

1) 2로 나누어지는 경우

2) 2가 아닌 홀수로 나누어지는 경우(i+=2), 특히 효율을 위해 제곱근만큼만 계산.

3) 자기 자신으로만 나누어지는 경우 스스로가 소인수가 된다.

n을 조건에 따라 계속 나누어가며 소인수를 찾는다.

function solution(n) {
    const factors = [];
    
    if (n % 2 === 0) {
        factors.push(2);
        while (n % 2 === 0) {
            n = n / 2;
        }
    }


    for (let i = 3; i <= Math.sqrt(n); i += 2) {
        if (n % i === 0) {
            factors.push(i);
            while (n % i === 0) {
                n = n / i;
            }
        }
    }
    
    if (n > 2) {
        factors.push(n);
    }

    return factors;
}

 


💡중복 문자 제거

function solution(my_string) {
  let answer = [];
  let array = my_string.split("");
  
  for (let i = 0; i < array.length; i++) {
    if (!answer.includes(array[i])) {
      answer.push(array[i]);
    }
  }
  
  return answer.join("");
}

!answer.includes()로 해당하지 않는 글자만 배열에 추가되도록 하였다. 

반복문자 제거하는 Set을 통해 간단하게 해결한 방법이 있어 기록한다.

function solution(my_string) {
    return [...new Set(my_string)].join('');
}

 

 

💡삼각형 조건

function solution(sides) {
  const sortedList = sides.sort();
  if(sortedList[2] < sortedList[0]+sortedList[1]){
      return 1;
  } else {
      return 2;
  }
}

삼각형의 조건은 가장 긴 변의 길이가 다른 두 변의 길이 합보다 작아야 함이다. 

sort()를 통해 오름차순으로 정렬한 뒤 조건을 주어 해결했다. 유사하지만 삼항 연산자를 통해 푸는 법을 기록한다.

function solution(sides) {
    sides = sides.sort((a,b) => a-b)
    return sides[0]+sides[1] > sides[2] ? 1 : 2;
}

💡가까운 수

function solution(array, n) {
    let answer = array[0];
    for(let i=1;i<array.length;i++){
        if(Math.abs(array[i]-n)<Math.abs(answer-n)){
            answer = array[i]
        } else if (Math.abs(array[i]-n)===Math.abs(answer -n) && array[i] < answer){
            answer = array[i]
        }
    }    
    return answer;
}

Math.abs()로 절댓값을 구할 수 있다. 두 수가 같을 때 더 작은 수를 리턴하는 조건에서 막혀서 고심했다.

array[0]을 초기 answer값으로 정한 뒤 비교해가면서 바꿔치기 하는 방법이다.

 

 

💡369 문제

function solution(order) {
    let answer = 0;
    const tsn = ["3","6","9"];
    const numArr = order.toString().split("");
    
    numArr.forEach(num=>{
        if(tsn.includes(num)){
            answer +=1
        }
    })
    return answer;
}

split()메서드는 문자열에만 사용 가능하며, 숫자일 경우 toString()로 문자열로 변환한 뒤에 풀어야 한다. 

forEach와 includes 메서드를 사용해서 풀어보았다. tsn은 배열이기 때문에 배열에 단일문자 num이 포함되는지 확인하고 그 개수만큼 answer을 증가시킨다.

 

하단은 Set와 has를 사용한 풀이법, filter을 사용한 풀이법으로 한번쯤 살펴볼 만 하다. 

function solution(order) {
    const mySet = new Set([3,6,9]);
    return String(order).split('')
                        .filter(num => mySet.has(Number(num)))
                        .length;
}
function solution(order) {
  return order
    .toString()
    .split("")
    .filter((v) => v === "3" || v === "6" || v === "9").length;
}

 

 

 

💡암호 해독

function solution(cipher, code) {
  const answer = [];
  const cipherArr = cipher.split("");
  for(let i=code-1;i<cipherArr.length;i+=code){
    answer.push(cipherArr[i]);
  }
  return answer.join("");
}

간단하게 풀었는데 사실 배열로 만들 필요가 없었던 것 같다. 

function solution(cipher, code) {
  var answer = "";
  for (let i = code - 1; i < cipher.length; i += code) {
    answer += cipher[i];
  }
  return answer;
}

 

 

💡대소문자 체인지

 

처음에 대소문자를 전부 나열한 뒤에 indexOf로 찾는 방식으로 풀었다. map을 통해 삼항 연산자로 깔끔하게 쓰는 방법이 있어서 기록해둔다.

function solution(my_string) {
    return my_string.split('').map(n => 
    n === n.toUpperCase() ? n.toLowerCase() : n.toUpperCase()).join('')
}

 

Comments