728x90
문제 설명
햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다. 함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 됩니다. 상수가 일하는 가게는 정해진 순서(아래서부터, 빵 – 야채 – 고기 - 빵)로 쌓인 햄버거만 포장을 합니다. 상수는 손이 굉장히 빠르기 때문에 상수가 포장하는 동안 속 재료가 추가적으로 들어오는 일은 없으며, 재료의 높이는 무시하여 재료가 높이 쌓여서 일이 힘들어지는 경우는 없습니다.예를 들어, 상수의 앞에 쌓이는 재료의 순서가 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵]일 때, 상수는 여섯 번째 재료가 쌓였을 때, 세 번째 재료부터 여섯 번째 재료를 이용하여 햄버거를 포장하고, 아홉 번째 재료가 쌓였을 때, 두 번째 재료와 일곱 번째 재료부터 아홉 번째 재료를 이용하여 햄버거를 포장합니다. 즉, 2개의 햄버거를 포장하게 됩니다.상수에게 전해지는 재료의 정보를 나타내는 정수 배열 ingredient가 주어졌을 때, 상수가 포장하는 햄버거의 개수를 return 하도록 solution 함수를 완성하시오.
나의 풀이
def solution(ingredient):
cnt = 0
while len(ingredient) > 3:
a = "".join(map(str,ingredient))
if '1231'in a:
cnt += 1
index = a.index('1231')
del ingredient[index:index+4]
else:
break
return cnt
내가 처음에 시도했던 방식은 list를 문자열로 변환하여 찾는 방식이었다.
코드 실행시 제시되었던 문제들은 정답이었지만 제출시 런타임 오류가 발생하는 문제가 생겼다.
열심히 이리저리 시도해 보았지만 역부족이었다.. 따라서 다른 분들의 풀이를 보면서 개선했다.
다른사람 풀이 + 개선점
def solution(ingredient):
cnt = 0
i = 0
for i in range(len(ingredient)-3):
if ingredient[i:i+4] == [1,2,3,4]:
i += 1
cnt += 1
del ingredient[index:index+4]
return cnt
다른분들의 풀이를 참고하여 그 다음으로 시도했던 방식이 리스트 자체로 1,2,3,1 을 찾고 제거하는 방식이었다.
그러나 아까와 마찬가지로 런타임 오류가 발생했다.
def solution(ingredient):
s = []
cnt = 0
for i in ingredient:
s.append(i)
if s[-4:] == [1, 2, 3, 1]:
cnt += 1
del s[-4:]
return cnt
이것이 최종적으로 정답으로 채택된 코드인데 리스트 s를 만들어 ingredient의 요소들을 하나씩 넣고 그 요소들의 맨 마지막부터 네자리가 1,2,3,1의 형태를 띄면 del을 통해 제거하는 형식으로 반복을 수행한다.
세상에는 똑똑한 사람이 많은것 같다~!
728x90
'프로그래머스' 카테고리의 다른 글
프로그래머스 Python Lv.1 기사단원의 무기 (4) | 2023.11.29 |
---|---|
프로그래머스 Python Lv.1 바탕화면 정리 (0) | 2023.11.28 |
프로그래머스 MySQL Lv.3 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 /대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (1) | 2023.11.27 |
프로그래머스 MySQL Lv.2 자동차 평균 대여 기간 구하기 / Lv.3 대여 기록이 존재하는 자동차 리스트 구하기 (0) | 2023.11.27 |
프로그래머스 Python 둘만의 암호 (7) | 2023.11.27 |