JavaScript - 프로그래머스 레벨 : 0(14) - ORDER BY '정답률'

먹보·2022년 12월 28일
0

1. 문자열 밀기

문제 : 문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 몇 번 밀어야 하는지 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

function solution(A, B) {
    if (A === B){
        return 0
    }
    let arr = [...A]
    for(let i = 0; i< arr.length; i++){
            arr.unshift(arr.pop())
            if(arr.join('') === B)
                return i+1;
    }
    return -1;
}

🗒️코멘트 : 처음에는 몇 번 밀렸는지를 계산하려했지만 생각해야되는 변수가 너무 많아 방향을 바꿨다. 사실 민다는 개념이 맨 뒤에 있는 요소를 뺀 후, 앞으로 넣어주는 것이기 때문에 arr.pop()으로 뺀 요소를 앞에 넣어주는 방식을 써서 이것을 몇 번 반복하는지를 계산 후 그 값을 return 해주었다.

2. 치킨 쿠폰

문제 : 프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.

function solution(chicken) {
    let coupon = chicken;
    let service = 0;
    
    while(coupon >= 10){
        let newCoupon = parseInt(coupon/10) + (coupon%10)
        service += parseInt(coupon/10)
        coupon = newCoupon
    }
    return service
}

🗒️코멘트 : 오호!! 제대로 된 while loop 사용은 처음이다!!!

3. 유한소수 판별하기

문제 : 소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.

기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.
두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.

function solution(a, b) {
  const factorsB = [];
  const primes = [];  
  const arr = []
  const gcf = gcd(a,b);
  const resizedB = b/gcf
  if (resizedB == 1){
      return 1
  }
  for(let i = 1 ; i <= resizedB ; i++){
      if(resizedB % i == 0){
          factorsB.push(i)
      }
  }
  for (let j= 0; j < factorsB.length;j++){
      if(findPrimes(factorsB[j])){
          primes.push(factorsB[j])
      }
  }
  for (let k = 0 ; k < primes.length ; k ++){
    if(!(primes[k] == 2) && !(primes[k] == 5)){
      arr.push(primes[k])
    }
  }
  if(arr.length > 0){
    return 2
  } else {
    return 1
  }
}

function findPrimes(divisor){
    const primesQ = [];
    for (let i = 1 ; i <= divisor ;i++){
        if (divisor % i == 0){
            primesQ.push(i)
        }
    }
    if(primesQ.length == 2){
        return true
    } else{return false}
}

function gcd(x, y) {
  x = Math.abs(x);
  y = Math.abs(y);
  while(y) {
    var t = y;
    y = x % y;
    x = t;
  }
  return x;
}

🗒️코멘트 : 너무 직관적으로 풀었나보다...코드량 무엇...

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글