coding etude
[javascript] 푸드파이트 대회 본문
문제 생략
3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면, 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"이 됩니다. 따라서 1번 음식 1개는 대회에 사용하지 못합니다.
수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때, 대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요.
제한사항
- 2 ≤ food의 길이 ≤ 9
- 1 ≤ food의 각 원소 ≤ 1,000
- food에는 칼로리가 적은 순서대로 음식의 양이 담겨 있습니다.
- food[i]는 i번 음식의 수입니다.
- food[0]은 수웅이가 준비한 물의 양이며, 항상 1입니다. <- 이부분이 문제에 없어서 한참 삽질함..
풀이
- 우선 문제가 좀 지져분 한 느낌이다.. 억지로 만든느낌?
- 메소드를 사용하면 간단하게 풀 수 있지만, 메소드를 얼만큼 잘 활용하는지 하는 문제인건가..?
function solution(food) {
var answer = '';
// 0은 물이기 때문에 1부터 시작
for(let i=1; i<food.length; i ++){
// i는 음식의 순서 번호와 같기 때문에 i를 음식의 반을 나눈 값으로 반복해주면 된다.
answer += String(i).repeat(parseInt(food[i] / 2));
}
// 반복된 값에 0을 붙이고 ...문법으로 배열 형태로 만들고 reverse로 뒤집고, join으로 붙인 값을 더 더한다.
return `${answer}0${[...answer].reverse().join("")}`;
// 문제 자체는 쉬운데.. 고민하게 만드는 문제가 아닌 자바스크립트 문법을 얼마나 아는지 물어보는 느낌,,
// 물로 메소드를 사용하지 않고 다 풀어서 해결해도 가능하다.
}
해결 2
- 위 풀이 1을 메소드 없이 풀어서 해결 하는 방법..의미가 있나..
- 물이 하나다 아니다 라는 가정하에 food[0] 까지 모든 리소스를 사용 해야한다면 조금 더 복잡해 지겠지..
function solution(food) {
var answer = '';
let reverse = ''
// 각 음식을 음식의 반만큼 반복해서 더해줌
for(let i=1; i<food.length; i ++){
for(let k=0; k<Math.floor(food[i]/2); k++){
answer += i.toString();
}
}
// 반대로 뒤집에서 한번씩 더해줌
for(let j=answer.length-1; j>=0; j--){
reverse += answer[j];
}
return `${answer}0${reverse}`;
}
'algorithm' 카테고리의 다른 글
[Javascript]달리기 경주 (0) | 2023.08.09 |
---|---|
[javascript] 햄버거 만들기 (0) | 2023.01.09 |
[Javascript] 과일 장수 (0) | 2023.01.05 |
[javascript] 기사단원의 무기 (0) | 2023.01.05 |
[javascript] 문자열 나누기(프로그래머스) (0) | 2023.01.03 |