새소식

⌨️ Algorithms/프로그래머스

[Python] 프로그래머스 Lv1_푸드 파이트 대회

2023. 4. 10. 23:07

  • -

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

 

프로그래머스

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

programmers.co.kr

 

  • 수웅이는 매달 주어진 음식을 빨리 먹는 푸드 파이트 대회를 개최
  • 이 대회에서 선수들은 1대 1로 대결하며, 매 대결마다 음식의 종류와 양이 바뀜
  • 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행
  • 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리
  • 이때, 대회의 공정성을 위해 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 
  • 이번 대회부터는 칼로리가 낮은 음식을 먼저 먹을 수 있게 배치하여 선수들이 음식을 더 잘 먹을 수 있게 하려고 함
  • 이번 대회를 위해 수웅이는 음식을 주문했는데, 대회의 조건을 고려하지 않고 음식을 주문하여 몇 개의 음식은 대회에 사용하지 못하게 되었음
  • 예를 들어, 3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면,
    • 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"
    • 1번 음식 1개는 대회에 사용하지 못함
  • 수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때, 대회를 위한 음식의 배치를 나타내는 문자열을 return

제한사항

  • 2 ≤ food의 길이 ≤ 9
  • 1 ≤ food의 각 원소 ≤ 1,000
  • food에는 칼로리가 적은 순서대로 음식의 양이 담겨 있음
  • food[i]는 i번 음식의 수
  • food[0]은 수웅이가 준비한 물의 양이며, 항상 1
  • 정답의 길이가 3 이상인 경우만 입력으로 주어짐

 

"""
입출력 예시)

food = [1, 3, 4, 6] -> "1223330333221"
food = [1, 7, 1, 2] -> "111303111"
"""

 

 

## 의사코드 ##

# food[0]은 물 => 0 
# food[i] => i번 음식의 수 

# 1) 먼저, <왼쪽 -> 오른쪽> 순서로 먹는 선수의 음식 배치 구하기
# 2) 음식 배치에 물인 '0' 추가 
# 3) 왼쪽 -> 오른쪽 순서인 선수의 음식 배치를 뒤집어서 <오른쪽 -> 왼쪽> 순서로 먹는 선수의 음식 배치 구하기

# 음식 배치 구하기 
# i번 음식을 i번 음식의 수를 2로 나눈 몫만큼 곱하기 
# str(i) * (food[i] // 2)

 

 

 

 

def solution(food):
    answer = ''
    for i in range(1, len(food)):
        answer += str(i) * (food[i] // 2)
    return answer + '0' + answer[::-1]

 

 

  • 1) 먼저, <왼쪽 -> 오른쪽> 순서로 먹는 선수의 음식 배치 구하기
    • 음식 배치: i번 음식을 i번 음식의 수를 2로 나눈 몫만큼 곱하기 
  • 2) 음식 배치에 물인 '0' 추가
  • 3) <왼쪽 -> 오른쪽> 순서인 선수의 음식 배치를 뒤집어서 <오른쪽 -> 왼쪽> 순서로 먹는 선수의 음식 배치 구하기 
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!