list를 value로 갖는 dict 생성하기
dicts={}
for i in range(len(lists)):
#key = value
dicts[i]=lists[i]
위 코드를 통해 리스트의 각 원소를 value로, 각 원소의 인덱스를 key로 가지는 딕셔너리를 만들 수 있습니다.
여기서 len(lists)를 대체할 수 있는 함수가 있는데요!
바로 enumerate입니다.
dicts={}
for i in enumerate(lists):
#key = value
dicts[i]=lists[i]
enumerate() 함수는 반복 가능한 객체(예: 리스트)를 입력으로 받아 각 요소와 해당하는 인덱스를 포함하는 이터레이터를 반환합니다. 이렇게 함으로써 코드를 더 간결하게 작성할 수 있습니다.
여기서 enumerate() 함수의 더 특별한 점은 바로 index와 value에 접근할 수 있다는 점입니다!
dicts={}
for index, value in enumerate(lists):
#key = value
dicts[index]=value
위와 같이 이터러블한 객체의 index와 value에 바로 접근할 수 있어 간편합니다!
dict 첫 번째 key, value 가져오기
first_key=list(dicts.keys())[0]
first_vaue=list(dicts.values())[0]
위와 같이 인덱스로 접근해서 가져올 수도 있지만, 이보다 훨씬 빠르게 가져올 수 있는 방법은 다음과 같습니다.
first_key = next(iter(my_dict))
first_value = my_dict[first_key]
위와 같이 next() 함수와 iter() 함수를 활용하여 key를 가져오고 그 key를 키로 갖는 value를 가져올 수 있습니다.
iter() 함수는 반복 가능한 객체(iterable)를 인자로 받아 이터레이터(iterator)를 반환합니다. 이터레이터는 next() 함수를 사용하여 다음 요소에 순차적으로 접근할 수 있는 객체입니다.
next() 함수는 이터레이터를 인자로 받아 다음 요소를 반환합니다. 이때, 이터레이터는 반복 가능한 객체에서 생성된 객체여야 합니다. 이터레이터를 순회하면서 next() 함수를 호출하면 순차적으로 다음 요소를 반환하게 됩니다.
next() 함수를 사용하여 다음 요소에 접근하기 전에는 반복 가능한 객체(iterable)를 이터레이터(iterator)로 변환해야 합니다.
하지만, for 루프를 사용할 때는 자동으로 반복 가능한 객체를 이터레이터로 변환해주기 때문에 for 루프를 사용하여 딕셔너리를 순회하는 경우에는 직접적으로 iter() 함수를 호출할 필요가 없습니다.
아래 영상 27:00초에 나오는 문제입니다. 문제 설명은 아래 영상에서 봐주세요!
https://www.youtube.com/watch?v=5Lu34WIx2Us&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=7
개미전사 코드
import sys
input = sys.stdin.readline
n=int(input())
storage=list(map(int, input().split()))
#DP 테이블 초기화
dp=[0] * 100
#DP 진행(바텀 업 방식)
dp[0]=storage[0] #첫 번째 식량 창고는 그대로 방문하여 훔치는 것이 최대값
dp[1]=max(storage[0], storage[1]) #첫 번째와 두 번째 식량 창고 중 어느 것을 훔칠지 결정
for i in range(2, n):
#i번째 식량 창고를 훔치지 않는 경우의 최대값과 i번째 식량 창고를 훔치는 경우의 최대값 선택
#i번째 식량 창고를 훔치므로 이전에 훔친 창고는 i-2번째 창고가
dp[i] = max(dp[i-1], dp[i-2]+storage[i])
print(dp[n-1]) # 마지막 식량 창고까지 훔친 경우의 최대값 출력
'코딩 테스트 일지 📒' 카테고리의 다른 글
[다이나믹 프로그래밍] 프로그래머스_정수 삼각형 (1) | 2024.04.08 |
---|---|
[다이나믹 프로그래밍] 1로 만들기 (1) | 2024.04.08 |
[DFS] 백준_양 한마리... 양 두마리... (1) | 2024.04.05 |
[그리디] 백준_흙길 보수하기 (1) | 2024.04.01 |
[구현] 백준 5430_AC (1) | 2024.04.01 |