🔍 언패킹이란 ?
- 언패킹은 간단하게 set, tuple, list 형태를 풀어주는 것을 말한다.
- 위 자료형 변수 앞에 * 을 붙여주면 된다.
def fun1(*args: int) -> int: result = 0 for i in args: result += i return result test = (1, 2, 10, 4, 5) print(fun1(*test)) # 22
- 위 fun1 함수는 int형 인자를 여러개 받도록 의도 되었는데 print 부분에 test 라는 tuple이 들어간 것을 볼 수 있다.
위 fun1(*test) 는 fun1(1, 2, 10, 4, 5) 가 들어간것과 같다.
🔍 dictionary도 언패킹이 가능한데 key, val 형태로 들어가 key, val 형태로 사용 가능하다.
test = dict() fun1(**test)
dictionary 언패킹은 ** 을 붙여야 한다.
🧲 알고리즘 Dynamic Programming
🔍 이번 문제는 방법을 떠올리는데 까지 오래 걸렸다.
다이나믹 프로그래밍 문제들은 문제 난이도가 평균적으로 어려운거 같고, 모든 문제가 그렇겠다만은, 특히 접근 방법을 알면 쉽게 풀리는 것 같은 느낌...? 이 든다.
🔍 풀이
from collections import defaultdict def solution(n, number): def fun1(set1, set2): temp = set() for i in set1: for j in set2: temp.add(i + j) temp.add(i * j) temp.add(j - i) temp.add(i - j) if j != 0: temp.add(i // j) if i != 0: temp.add(j // i) return temp # 입력받은 두 개의 set 을 모두 계산하여서 temp 에 저장 temp = defaultdict(set) for i in range(1, 10): if i == 1: temp[i].add(n) else: str_append = int(str(n) * i) temp[i].add(str_append) for x in range(1, i): for y in range(1, i): if x + y == i: temp_result = fun1(temp[x], temp[y]) for re in temp_result: temp[i].add(re) if number in temp[i]: return i return -1
💡 접근 방법
- 결국 모든 계산을 해야하며 트리나 재귀 느낌으로 쭉 타고 들어간다고 생각하면 편할 것 같다.
- 최대 9번 반복이니 1~9 번 반복
- 중복 제거를 위해 set() 사용
- 55 -> N 이 5일때 2번 반복해서 나올 수 있는 수
- 555 ->N 이 5일때 3번 ... 하기 관련 코드
str_append = int(str(n) * i)
- defaultdict key 값에 반복 횟수 결과값을 저장하였다. -> 이 부분만 떠올리면 쉽게 풀 수 있을 것 같다.
🔍 퇴근 후 코딩 공부를 하는 것이 시간이 별로 없고 더 하고 싶어서 퇴사하였는데 12시간씩 코딩을 하니 더(?) 좋다 ㅋㅋㅋㅋㅋ 점심 저녁을 회사에서 먹었었던걸 집에서 먹으려 하니 너~~무 귀찮고 허리가 좀 아프지만 ㅠ 만족하면서 공부 중이다.
🔍 솔직히 하루에 습득한 지식, 푼 알고리즘 문제들을 모두 올리고 싶지만 쉬운것 어려운것 포함해서 못해도 3개 많게는 5 ~ 10 문제를 푸는 것 같지만 전부 올리기는 힘들어
💡인상 깊은 문제 💡어려웠던 문제 and 💡자꾸 헷갈리는 지식들 위주로 올리고 있다. 오늘 끝!