본문 바로가기
[항해99] TIL

10일차 (알고리즘6)

by @kkkk_biiin 2023. 8. 25.
728x90

 오늘은 숫자 배열을 입력하면 배열 요소의 수/2 만큼 1, 2, 3 ... 3, 2, 1과 같은 문자열로 출력하는 알고리즘 문제를 리뷰하고자 한다.

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/134240

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

// food의 길이만큼 반복해서 홀수면 -1, 짝수면 그대로 두고 /2를 해서 total에 할당
  for (let i = 1; i < food.length; i++) {
    total.push(food[i] % 2 !== 0 ? (food[i] - 1) / 2 : food[i] / 2);
  }

 처음에는 배열의 요소들을 파악해야 하기 때문에 for문을 사용했다. 그리고 배열의 요소를 문자열에 넣는 것이 아닌 2로 나눈 값을 넣어야 하기 때문에 삼항 연산자를 사용해서 구분 지었다.

 

// total[j]의 값이 0이면 패스, 아니면 front에 숫자 크기만큼 반복 해서 넣기
  for (let j = 0; j < total.length; j++) {
    let cnt = j + 1 + "";
    if (total[j] === 0) {
      continue;
    } else {
      front.push(cnt.repeat(total[j]));
    }
  }

  그리고 첫 번째 코드를 통해 만들어진 total이라는 배열의 각각 요소들이 0이 아니면 front라는 배열에 추가하였다.

 

// 문자열로 만들기
  let newFront = front.join("");
  back = front.reverse();
  let newBack = back.join("");
  answer = newFront + "0" + newBack;

 그리고 이렇게 만들어진 배열을 newFront라는 문자열로 바꾸고, newBack 문자열에는 front를 뒤집은 값을 넣었고, 최종적으로 만들어진 두 문자열을  더하는 방식으로 문제를 완성하였다. 

 

최종 코드

// https://school.programmers.co.kr/learn/courses/30/lessons/134240
// 푸드 파이트 대회

function solution(food) {
  var answer = "";
  let total = [];
  let front = [];
  let back = [];

  // food의 길이만큼 반복해서 홀수면 -1, 짝수면 그대로 두고 /2를 해서 total에 할당
  for (let i = 1; i < food.length; i++) {
    total.push(food[i] % 2 !== 0 ? (food[i] - 1) / 2 : food[i] / 2);
  }
  // total[j]의 값이 0이면 패스, 아니면 front에 숫자 크기만큼 반복 해서 넣기
  for (let j = 0; j < total.length; j++) {
    let cnt = j + 1 + "";
    if (total[j] === 0) {
      continue;
    } else {
      front.push(cnt.repeat(total[j]));
    }
  }
  // 문자열로 만들기
  let newFront = front.join("");
  back = front.reverse();
  let newBack = back.join("");
  answer = newFront + "0" + newBack;

  return answer;
}
728x90

'[항해99] TIL' 카테고리의 다른 글

12일차 (React 컴포넌트 중복 제거)  (0) 2023.08.28
11일차 (SEO, CRA, Component, Props, 불변성)  (0) 2023.08.25
9일차 (알고리즘5)  (0) 2023.08.24
8일차 (알고리즘4)  (0) 2023.08.22
7일차 (알고리즘3)  (2) 2023.08.22