연습장
18. 햄버거 만들기 본문
빵 - 야채 - 고기 - 빵 순서 1231 을 1개의 값으로 한다.
2 1 1 2 3 1 2 3 1
2 1 2 3 1
2
총 2개 의 햄버거를 만들게 된다.
1. 주어진 배열의 앞에서부터 1231 이라는 순서가 나오게 되면
2. 기존 배열에서 제거하고
3. result 를 1 더하면 될거같다.
4. 그리고 제거 된 배열을 사용하여 1-3 을 반복
def solution(ingredient):
answer = 0
b = ""
for i in ingredient:
b += str(i)
while "1231" in b:
b = b.replace("1231", "")
answer += 1
return answer
테스트 케이스에 실패가 나오는것으로 보아
재료를 다 쌓고 하는게 아닌 쌓는 동시에 1231 이 되는지 확인해야 될것 같다.
def solution(ingredient):
answer = 0
b = ""
for i in ingredient:
b += str(i)
if "1231" in b:
b = b.replace("1231", "")
answer += 1
return answer
시간 초과가 걸리게 되었다.
다시 처음으로 돌아가서 생각해보면
replace 가 한번에 다바꿔서 그렇게 된것 같아서
replace 에 제한을 주었다.
def solution(ingredient):
answer = 0
b = ("").join(str(i) for i in ingredient)
while True:
if "1231" in b:
b = b.replace("1231", "",1)
answer += 1
else :
break
return answer
그 결과 테스트3 이 해결이 되긴했는데 .. 아무튼 시간초과 가 걸리게 된다.
다시 생각해봤는데 특정 문자열 "1231" 이 생기는것을 비교하는곳은 결국 맨 뒷부분이 된다. 따라서 문자를 추가하고 맨뒤의 문자열 4개가 1231 이 되었는지만 확인하면 되지않을까?
def solution(ingredient):
answer = 0
b = ""
for i in ingredient:
b += str(i)
if "1231" in b[-4:]:
b = b.replace("1231", "",1)
answer += 1
return answer
마찬가지로 제거하는 부분도 맨 뒤에 4자리만 없애면 되지 않을까?
def solution(ingredient):
answer = 0
b = ""
for i in ingredient:
b += str(i)
if "1231" in b[-4:]:
b = b[:-4]
answer += 1
return answer
그래서 replace 를 쓰지 않았더니 훨씬 빠르게 연산되는것을 확인 할 수 있었다.
'프로그래머스 > 1단계' 카테고리의 다른 글
20. 성격 유형 검사하기 (0) | 2024.01.20 |
---|---|
19. 신규 아이디 추천 (0) | 2024.01.19 |
17. 키패드 누르기 (0) | 2024.01.19 |
16. 크레인 인형뽑기 게임 (0) | 2024.01.17 |
15. 이웃한 칸 (0) | 2024.01.17 |