본문 바로가기
개발이야기/알고리즘

[알고리즘] 프로그래머스 푸드 파이트 대회

by KimHarry 2023. 2. 3.

알게된 내용

reverse, 전개 함수

 

1. 조건

이것도 굉장히 널널한 조건이였다.

뭘해도 시간초과없이 풀 수 있을것같다.

하지만 최대한 배웠던 자료구조로 풀어보려고 시도했다.

 

2. 풀이

배운걸 써먹어보자라는 느낌으로 풀어본 것 같다.

그래서 대충 Stack과 Queue만들어서 문자로 만들어서 return해주었다.

 

3. 내 풀이

function solution(food) {
  let result = ''
  const Queue = []
  const Stack = []

  food.map((mount, idx) => {
    if (idx === 0) return;
    
    Queue.push(parseInt(mount / 2))
    Stack.push(parseInt(mount / 2))
  })

  for (let i = 0; i < Stack.length; i += 1) {
    result += `${i + 1}`.repeat(parseInt(Stack[i], 10))
  }

  result += '0'

  for (let i = Stack.length - 1; i >= 0; i -= 1) {
    result += `${i + 1}`.repeat(parseInt(Stack[i], 10))
  }

  return result;
}

solution([1, 3, 4, 6])
solution([1, 7, 1, 2])

풀긴 했지만 굉장히 복잡하기도 하고 굳이 이렇게 안풀어도 될 것 같다.

근데 뭐 배웠던 자료구조 써먹어 보는데 의의를 두었으니...

풀리긴했다.

 

4. 다른 풀이 (전개 함수와 reverse 활용)

function solution(food) {
  const game = []

  food.map((item, idx) => {
    if (idx === 0) return;

    game.push(String(idx).repeat(parseInt(item / 2, 10)))
  })

  
  return [...game].join("") + '0' + [...game].reverse().join("")
}

solution([1, 3, 4, 6])
solution([1, 7, 1, 2])

속도와 코드 가시성을 생각한다면 이게 훨씬 빠르고 좋다.