[python_파이썬_pass]프로그래머스_LV1_푸드 파이트 대회_풀이

2024. 5. 14. 12:07코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/d04PXaSTIlQ?feature=shared

처음 문제를 해석하는데 시간이 걸렸다.

주어지는 food는 음식의 개수이다. ==> 이걸 해석하는데도 시간이 걸렸다.

food의 0번째 index의 숫자는 물을 의미한다. 

즉, 1번째 index는 첫번째 음식의 개수, 2번째 index는 두번째 음식의 개수.... 이렇게 흘러간다.

 

<첫번째 시도 : 통과>

1. food의 0번째 index는 물이니까 무시하고, 범위는 1부터 끝까지 정해준다.

2. food[i] // 2를 해서 몇개를 배치해야 하는지 확인한다.

3. 2번에서 확인한 개수만큼 음식을 배치한다.

4. 신규변수를 초기화 후 3번에서 배치한 순서의 역순을 저장한다.

5. answer마지막에 물(0)을 더해주고, 4번을 더해주면 끝.

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

 

<다른사람 풀이 참고>

1. 정말 깔끔한 코드이다

    ㄴ enumerate로 index와 food의 숫자를 각 뽑아서 바로 player1의 음식 순서와 개수를 나열해준다.

    ㄴ player2에 player1을 역으로 저장한다.

    ㄴ player1과 2를 더해주는데 중간에 0만 더해주면 답이 나온다.


def solution(food):
    player1 = ''.join(str(foodnum) * (quantity//2) for foodnum, quantity in enumerate(food))
    player2 = player1[::-1]
   
    return player1 + str(0) + player2

2. itertools의 chain으로 묶어서 사용할 수도 있다.

이건 굳이 chain으로 묶지 않아도 사용 할 수 있을 것 같은데....

from itertools import chain

def solution(food):
    stack = []
    for i in range(1, len(food)):
        for _ in range(food[i]//2):
            stack.append(i)
    return "".join(map(str, chain(stack, [0], stack[::-1])))

 

3. itertools의 chain함수 참고 (from chatgpt)

itertools.chain 함수는 여러 개의 iterable(반복 가능한 객체)을 하나의 iterable로 연결하는 데 사용됩니다. 예를 들어, 리스트, 튜플, 문자열 등 여러 개의 iterable을 하나로 합쳐서 순차적으로 순회할 수 있습니다. 이를 통해 여러 개의 iterable을 하나의 시퀀스로 간편하게 처리할 수 있습니다.

1) 기본 사용법 : [1, 2, 3, 4, 5, 6, 7, 8, 9]

import itertools

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

# itertools.chain을 사용하여 여러 개의 리스트를 하나로 연결
combined = itertools.chain(list1, list2, list3)

# 연결된 결과를 리스트로 변환하여 출력
print(list(combined))

 

2) 듀플과 문자열 연결 : [10, 11, 12, 'a', 'b', 'c']

import itertools

tuple1 = (10, 11, 12)
str1 = "abc"

# itertools.chain을 사용하여 튜플과 문자열을 연결
combined = itertools.chain(tuple1, str1)

# 연결된 결과를 리스트로 변환하여 출력
print(list(combined))

 

3) 배열 연결 : [1, 2, 3, 4, 5, 6, 7, 8, 9]

import itertools

lists = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]

# itertools.chain을 사용하여 리스트 안의 리스트들을 하나로 연결
combined = itertools.chain(*lists)

# 연결된 결과를 리스트로 변환하여 출력
print(list(combined))

 

  • itertools.chain은 여러 개의 iterable을 하나의 iterable로 연결하는 함수입니다.
  • 여러 iterable을 순서대로 연결하여 하나의 시퀀스로 처리할 수 있습니다.
  • itertools.chain을 사용하면 여러 개의 리스트, 튜플, 문자열 등을 쉽게 합칠 수 있습니다.

이와 같은 기능을 통해 복잡한 데이터 구조를 단순하게 처리할 수 있습니다.

728x90
반응형