문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/134240
소스 코드
def solution(food):
# 딕셔너리에 숫자별 개수 저장
foods = {}
for i in range(1,len(food)):
foods[i] = food[i] // 2
answer = '0'
# 큰 숫자부터 작은숫자까지 0을 감싸도록 한다
for tmp in reversed(foods.keys()):
answer = str(tmp)*foods[tmp] + answer + str(tmp)*foods[tmp]
return answer
해설
- 단순 구현 문제
문제 조건에 따르면 홀수로 표현된 음식은 1개를 버리고 좌우로 배치해야 합니다.
간단히 생각하면 2로 나눈 몫만큼을 0(물) 좌우에 배치하면 됩니다.
따라서 리스트의 두 번째 원소부터 2로 나눈 몫을 딕셔너리에 저장합니다.
그리고 0을 중심으로 큰 숫자부터 개수에 맞게 배치해줍니다.
작은 숫자부터 배치하면 순서가 꼬여서, 왼쪽을 기준으로는 큰 칼로리의 숫자부터 배치가 됩니다.
예를 들어 좌우에 1,2,3이 각각 1,2,3개 배치되어야 하는 경우에 작은 칼로리부터 0 중심으로 붙이게 되면,
'0' -> '101' -> '2210122' -> '3332210122333'이 됩니다.
우리가 원하는 것은
'0' -> '3330333' -> '22333033322' -> '1223330333221'입니다.
따라서 큰 숫자부터 0의 좌우에 배치해야 정답이 됩니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 기사단원의 무기 (Python) (0) | 2023.02.16 |
---|---|
[프로그래머스] 과일 장수(Python) (0) | 2023.02.15 |
[프로그래머스] 햄버거 만들기(Python) (0) | 2023.02.14 |
[프로그래머스] 옹알이 (2)(Python) (0) | 2023.02.14 |
[프로그래머스] 콜라 문제(Python) (0) | 2023.02.14 |