728x90
오늘은 숫자 배열을 입력하면 배열 요소의 수/2 만큼 1, 2, 3 ... 3, 2, 1과 같은 문자열로 출력하는 알고리즘 문제를 리뷰하고자 한다.
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/134240
// 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 |