프로그래머스 코딩 테스트 연습 문제 Lv.0 JS - 5문제(옹알이(1),다음에 올 숫자,연속된 수의 합,종이 자르기,문자열 밀기)

찐새·2023년 4월 2일
0

코딩테스트

목록 보기
21/53
post-thumbnail

옹알이(1)

https://school.programmers.co.kr/learn/courses/30/lessons/120956

function solution(babbling) {
    const expressionsReg = /(aya)|(ye)|(woo)|(ma)/g
    let answer = 0;
    for (let i = 0; i < babbling.length; i++) {
        const restLength = babbling[i].replace(expressionsReg, "").length
        if (!restLength) answer++;
    }
    return answer;
}
  • expressionsRegbabbling에 있으면 지운다.
  • 지우고도 babbling이 남았다면 answer 값 증가시킨다.

다음에 올 숫자

https://school.programmers.co.kr/learn/courses/30/lessons/120924

function solution(common) {
    const leng = common.length;
    let answer = 0;
    if (common[1] - common[0] === common[leng-1] - common[leng-2]) {
        answer = common[leng-1] + (common[1] - common[0])
    } else {
        answer = common[leng-1] * (Math.floor(common[1] / common[0]))
    }
    return answer;
}
  • 배열의 두 번째 숫자와 첫 번째 숫자의 차가 마지막 숫자와 그 앞의 숫자 차와 같다면 등차, 아니라면 등비
  • 등차라면 배열 마지막 숫자에 공차를 더한다.
  • 등비라면 배열 마지막 숫자에 공비를 곱한다.

연속된 수의 합

https://school.programmers.co.kr/learn/courses/30/lessons/120923

function solution(num, total) {
    let answer, i=total;
    while (true) {
      answer = [];
       for (let j = 0; j < num; j++) {
           answer.push(i+j);
       };
       const sum = answer.reduce((x,y)=>x+y,0);
      if (sum === total) break;
        i--;
    }
    return answer;
}
  • 연속된 수는 total보다 작으므로 total의 수를 줄여가며 배열에 추가한다.
  • 추가한 배열의 합과 total을 비교해 같다면 중단, 아니라면 수를 점점 줄여간다.

종이 자르기

https://school.programmers.co.kr/learn/courses/30/lessons/120922

function solution(M, N) {
    if (M === 1 && N === 1) return 0;
    const m = M !== 1 ? M - 1 : 0;
    const n = N !== 1 ? (N - 1) * M : 0;
    return m + n;
}
  • MN이 모두 1이라면 자를 수 없으므로 0 리턴.
  • M 이 1이 아니라면 M - 1만큼 자를 수 있다.
  • N 이 1이 아니라면 N - 1M을 곱한 만큼 자를 수 있다.

문자열 밀기

https://school.programmers.co.kr/learn/courses/30/lessons/120921

function right(A, B) {
    const arr = A.split("");
    let count = 0;
    for (let i = 0; i < A.length; i++){
        if ( arr.join("") === B) return count;
        arr.unshift(arr.pop());
        count++;
    }
    return -1;
}

function solution(A, B) {
    let answer = right(A, B);
    return answer;
}
  • 오른쪽으로만 밀기 때문에 배열 마지막을 앞으로 옮겨 붙인다.
  • 재조합한 문자열이 B와 같으면 함수 종료, for문이 모두 돌아가면 조합할 수 없으므로 -1 반환.
  • 오른쪽 밀기, 왼쪽 밀기 비교해야 하는 줄 알고 각각 함수 만들었다가, 왼쪽 밀기 함수를 지웠다.
profile
프론트엔드 개발자가 되고 싶다

0개의 댓글