[알고리즘]프로그래머스 0단계 뽀개기(Day24)

HIHI JIN·2023년 4월 11일
0

알고리즘

목록 보기
27/29
post-thumbnail

Day 24

A로 B 만들기

문자열 before와 after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.

//내 코드
function solution(before, after) {
    before = [...before];
    for(let i of [...after]){
        let idx = before.indexOf(i);
        idx !==-1 && before.splice(idx,1);
    }
    return before.length===0 ? 1:0;
}
//after 요소를 before에서 indexOf하고, before의 그 인덱스의 값을 지움
//before의 길이가 0이면 1, 아니면0

//다른 사람 코드
function solution(before, after) {
    return before.split('').sort().join('') === after.split('').sort().join('') ? 1 : 0;
}
//sort()로 알파벳 순서로 정렬한 문자열끼리 비교해서 같으면 1, 다르면 0

k의 개수

1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.

//내 코드
function solution(i, j, k) {
    let result=[];
    for(let a=i; a<=j; a++){
        result.push(a);
    }
    return result.join("").split("").filter(v => Number(v)===k).length;
}
//i부터 j까지의 숫자를 반복문으로 구해서 배열에 담고
//배열의 요소인 숫자들을 모두 합치고, 다시 한글자씩 뗀 후,
//filter로 k인것만 담아서 길이 구하기

//다른 사람 코드
function solution(i, j, k) {
    let a ='';
    for(i;i<=j;i++){
        a += i;
    }
    return a.split(k).length-1;
}
//꼭 배열로 만들지 않고 초기문자열에 i를 붙이는 코드로 가면 배열.join("").split("")를 안써도 된다.
//for(let a=i; a<=j; a++) 이렇게 안 만들고 더 간단하게
//for(i;i<=j;i++) 이렇게 변수 a를 지정해주지 않고 바로 i를 요소로 쓸 수 있다.
//filter를 쓰지 않고, split(k)를 쓰면 k를 기준으로 두갈래로 나눠진다.
//k의 개수는 나눠진 것들-1을 하면 된다.

이진수 더하기

이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.

//내 코드
function solution(bin1, bin2) {
    return (parseInt(bin1,2) + parseInt(bin2,2)).toString(2);
}
//2진수인 두 수를 10진수로 바꾸고 더한 다음 결과를 2진수로 바꾼다.

//다른 사람 코드
function solution(bin1, bin2) {
  let temp = Number(bin1) + Number(bin2);
  temp = [...temp.toString()].reverse().map((v) => +v);

  for (let i = temp.length; i < 11; i++) {
    temp.push(0);
  }

  for (let i = 0; i < temp.length; i++) {
    if (temp[i] === 2) {
      temp[i] = 0;
      temp[i + 1]++;
    } else if (temp[i] === 3) {
      temp[i] = 1;
      temp[i + 1]++;
    }
  }
  return Number(temp.reverse().join("")).toString();
}
//2진수를 구현한 코드!

치킨 쿠폰

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

//내 코드
function solution(chicken) {
    /*처음 실패 코드
    let first = chicken/10;
    let coupon = chicken%10;
    let a=[];
    while(first>=10){
        a.push(first);
        coupon+=first%10;
        first=first/10;
    }
    if(coupon>=10){
        let k=Math.trunc(coupon/10);
        a.push(k);
        if(k>=1000) a.push(Math.trunc(k/1000));
    }
    return Math.round(a.reduce((acc,cur)=>acc+cur,0)+1);
    */
  
    // 치킨의 초기 값은 1081장
    let result = 0;
    let temp = chicken % 10; // 108개를 주문하면 쿠폰은 1개가 남는다.
    let answer = Math.floor(chicken / 10); // 108개의 닭 주문, 108 쿠폰 발급
    result += answer;
    answer += temp;

    while(1) {
        temp = answer % 10;
        answer = Math.floor(answer / 10); // 10
        result += answer;
        //console.log("temp-2", answer);
        if (answer === 0) {
            break;
        }
        answer += temp;
        //console.log("temp", answer);
    }

    return (result);
}
profile
신입 프론트엔드 웹 개발자입니다.

0개의 댓글