안녕하세요. 은공지능 공작소의 파이찬입니다.
오늘 풀어볼 문제는 "햄버거 만들기" 라는 문제입니다.
고민해 볼 포인트가 많은 문제인데요,
리스트의 일부를 효율적으로 제거하는 방법이 중요합니다.
이에 대해서 중점적으로 설명드리겠습니다.
해당 문제 바로가기 ↓↓↓ 아래 링크 클릭
https://school.programmers.co.kr/learn/courses/30/lessons/133502
1. 정답 공개
바로 정답 공개하도록 하겠습니다.
그 이후에 시간초과가 걸리는 코드와 정답으로 통과한 코드를 비교해 보겠습니다.
먼저, 사람들이 가장 많이 채택한 정답입니다.
def solution(ingredient):
s = []
cnt = 0
for i in ingredient:
s.append(i)
if s[-4:] == [1, 2, 3, 1]:
cnt += 1
for _ in range(4):
s.pop()
return cnt
다음으로 시간초과로 통과할 수 없는 코드를 보여드리겠습니다.
위의 코드와 동일하나, 딱 한 줄이 다릅니다.
def solution(ingredient):
s = []
cnt = 0
for i in ingredient:
s.append(i)
if s[-4:] == [1, 2, 3, 1]:
cnt += 1
s = s[:-4] # 해당 부분으로 인해 시간 초과 발생
return cnt
2. Pop() 함수에 대한 이해
input_list = [1, 2, 3, 1]
input_list.pop()
print(input_list)
output
------------------------------------
[1, 2, 3]
.pop() 함수를 통해 리스트의 일부 요소를 제거할 수 있습니다.
[리스트 데이터].pop()을 사용하게 되면, 해당 리스트의 맨 마지막 요소가 제거됩니다.
이 때, 별도 변수에 리스트를 다시 할당할 필요가 없습니다.
input_list = [1, 2, 3, 1]
input_list.pop(0)
print(input_list)
output
------------------------------------
[2, 3, 1]
pop() 함수 안에 파라미터를 지정할 수도 있습니다.
pop 함수 안에 제거하고 싶은 리스트 요소의 인덱스 번호를 넣어주면,
리스트의 해당 요소만 제거됩니다.
위의 예시에서 pop안에 0이라고 했기 때문에,
리스트의 0번 index인 1이 제거되었습니다.
input_list = [1, 2, 3, 1]
a = input_list.pop(0)
print(input_list)
print('a:', a)
output
---------------------------------------
[2, 3, 1]
a: 1
리스트에서 튀어나온(pop) 녀석을 변수에 할당할 수도 있습니다.
위의 코드에서 튀어나온 녀석을 a라는 변수에 할당했는데요,
그래서 a의 값은 1이 됩니다.
def solution(ingredient):
s = []
cnt = 0
for i in ingredient:
s.append(i)
if s[-4:] == [1, 2, 3, 1]:
cnt += 1
for _ in range(4):
s.pop()
return cnt
다시 정답 코드로 돌아가 봅시다.
리스트의 마지막 4요소가 [1, 2, 3, 1] 이면, pop함수가 4번 실행되는 구조입니다.
따로 pop 함수에 인덱스를 지정해주지 않았기 때문에,
자동으로 마지막 요소가 4번 튀어나가 제거되는 원리입니다.
3. 다른 풀이 (del 이용)
del 함수를 이용하여 리스트의 일부를 강제로 지울 수도 있습니다.
시간은 실행할 때마다 달라져서, 비교가 어렵네요...
pop 보다 del을 이용하는게 더 코드가 짧습니다.
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
4. 마무리
오늘 문제에서 가장 중요한 포인트는
리스트에서 특정 요소를 제거하는 방법입니다.
리스트 슬라이싱을 사용하지 않고
pop이나 del을 이용하여 제거하는 방법을 익혀두시길 바랍니다.
도움이 되셨다면 하단의 하트 한 번씩 부탁드립니다!
감사합니다.
반응형
'Python > 알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스] 기사단원의 무기 파이썬 알고리즘 문제풀이 (약수의 개수 구하기) (0) | 2022.12.08 |
---|---|
[프로그래머스] 유한소수 판별하기 파이썬 문제 풀이 #유클리드 호제법 #소인수분해 (0) | 2022.11.29 |
[프로그래머스] 문자열을 정수로 바꾸기 Python 풀이법 (0) | 2022.11.22 |
[프로그래머스] 컨트롤제트 알고리즘 문제풀이 (2) | 2022.11.17 |
[프로그래머스] 로그인 성공? 알고리즘 문제풀이 (0) | 2022.11.17 |