[Python#51] 푸드 파이트 대회

Gi Woon Lee·2024년 9월 6일
0

Python

목록 보기
10/13

푸드 파이트 대회

문제 이해

  • 푸드 파이트 대회에서는 좌우에 위치한 두 선수가 중앙의 물(0번 음식)을 향해 음식을 먹으며 다가가는 설정입니다.
  • 음식은 칼로리가 낮은 순서대로 배치되며, 각 음식은 좌우 대칭으로 나뉘어져 있습니다.
  • food 리스트는 각 음식의 개수를 나타냅니다. 예를 들어, food = [1, 3, 4, 6]이면, 1번 음식은 3개, 2번 음식은 4개, 3번 음식은 6개를 의미합니다.
  • 중앙에는 항상 0번 음식(물)이 위치하며, 좌우에서 칼로리가 낮은 음식부터 대칭으로 배치됩니다.
  • 각 음식의 개수는 2로 나눈 몫 만큼만 사용 가능하며, 남은 한 개는 사용되지 않습니다.

자료형 선언

  1. left: 왼쪽 선수에게 배치될 음식들을 문자열로 저장.
  2. right: left의 반대 방향인 오른쪽 선수에게 배치될 음식들을 저장. left를 반전하여 생성.
  3. answer: 최종적으로 left + '0' + right 형식으로 만들어 반환할 결과 문자열.

논리 구현

  1. for문을 사용해 food 리스트의 1번 인덱스부터 각 음식의 절반을 left에 추가합니다.
  2. left의 내용을 반전시켜 right를 생성합니다.
  3. 중앙에 '0'을 추가하여 물의 위치를 표현합니다.
  4. 최종적으로 left + '0' + right를 합쳐 반환합니다.

코드 구현

def solution(food):
    left = ''   # 왼쪽 대결자를 위한 음식 배치
    right = ''  # 오른쪽 대결자를 위한 음식 배치 (left의 반전)
    
    # 1번 인덱스부터 시작하여 각 음식의 절반을 left에 추가
    for i in range(1, len(food)):
        left += str(i) * (food[i] // 2)
        
    # left 문자열을 뒤집어서 right에 저장
    right = left[::-1]
    
    # 중앙에 물을 추가
    left += '0'
    
    # left + 0 + right 형식으로 반환
    return left + right

# 테스트 실행
food = [1, 3, 4, 6]
print(solution(food))  # 출력 예시: "1223330333221"

TIL (Today I Learned) 정리

  1. 문제 이해: 두 명의 선수가 중앙의 물을 향해 대결하며 음식을 먹어가며 다가간다. 칼로리가 낮은 음식부터 대칭으로 배치되며, 중앙에는 항상 물이 위치한다.

  2. 자료형 선언:

    • leftright는 문자열 형태로 음식을 배치하며, rightleft를 반전한 값이다.
    • leftright의 중간에 항상 물이 위치한다.
  3. 논리 구현:

    • for문을 사용하여 food 리스트의 각 요소를 순회하며 음식의 절반만큼 문자열에 추가한다.
    • rightleft의 반전된 문자열이다.
    • 최종적으로 중앙에 물을 추가하여 대칭적으로 배치된 음식을 반환한다.
  4. 코드 구현: for문과 문자열 조작을 통해 원하는 형식의 대칭 구조를 생성하고, 최종적으로 반환값을 출력한다.

이러한 접근 방식을 통해 주어진 조건에 맞는 대칭적인 음식 배치와 중앙 물 위치를 구현할 수 있습니다.

0개의 댓글