Stay Hungry Stay Foolish

프로그래머스 코딩테스트/Level 1

[Programmers] L1. 푸드 파이트 대회 (Python)

dev스카이 2024. 11. 11. 18:41

[문제 링크] 👇

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


풀이 방법

💡 2로 나누기

 

주어진 음식의 양을 두 사람에게 나누어 주어야 하므로 2로 나눈다.  2로 나눈 몫만큼 음식을 순서대로 배치하면 된다.

 

입력 예시

[1, 7, 1, 2]
  • 0번째 인덱스는 물의 양이고, 물은 항상 1이므로 신경 쓰지 않는다.
  • 1번째 인덱스부터 음식의 양이 주어진다.
  • 1번째 인덱스를 2로 나눈 몫은 3이다. 이 말은, 7개의 음식을 3개씩 나누어서 두 사람에게 줄 수 있다는 말이다. 따라서 1을 3만큼 저장한다.
  • 2번째 인덱스는 2보다 작으므로 두 사람에게 나누어 줄 수 없다. 따라서 무시한다.
  • 3번째 인덱스를 2로 나눈 몫은 1이다. 즉 2개의 음식을 1개씩 나누어 줄 수 있으니, 3을 1만큼 저장한다.

이런 과정을 거쳐서 나온 값은 '1113' 이다. 여기에 1113을 반대로 다시 배치해야 하므로 문자열[::-1] 을 사용한다.

최종적으로 결과를 반환할 때 기존 문자열 + 0 + 기존 문자열[::-1] 을 반환한다.

 

Solution

def solution(food):
    answer = ''
    for i in range(1, len(food)):
        if food[i] >= 2:  # 2로 나눠야 하므로 2보다 커야 한다.
            for j in range(food[i] // 2):
                answer += str(i)

    return answer + '0' + answer[::-1]

👩‍💻 회고

이중 for 문 말고 아래와 같이 작성해도 된다. 원래 이중 for 문으로 할 생각이 없었는데, str(food[i] // 2) 라고 하는 바람에 값이 제대로 안 나와서 결국 solution 코드를 짰다. 

answer += str(i) * (food[i] // 2)

 

다른 풀이를 봤는데 이렇게 간단하게 푸는 방법도 있었다. 대단하다는 말 밖에는...

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