본문 바로가기

컴퓨터공학 & 정보통신88

[LeetCode] 131. Palindrome Partitioning 접근 평이한 백트래킹 문제 pailndrome을 체크하는 방법을 어렵지 않으나 파이썬 문법을 제대로 이해하지 못하여 시간이 많이 걸렸다. 내가 알고리즘을 푸는 것인지 파이썬 문법을 공부하는 것인지.. 솔루션 class Solution: def partition(self, s: str) -> List[List[str]]: answer = [] s_length = len(s) def backtrack(answer_list, index): if index == s_length: answer.append(answer_list) return for i in range(index, s_length): current_str = s[index:i+1] if current_str == current_str[::-1]: .. 2023. 3. 23.
[LeetCode] 46. Permutations 접근 문제 자체는 기타 평이한 백트래킹 문제와 다를 바 없었지만 파이썬 리스트에 대한 개념 이해 부족으로 시간을 많이 씀 재귀 함수 내에서 리스트는 참조가 아닌 복사본을 활용하는 것을 권장 시간 버리는 문제라고 생각했는데 오히려 파이썬 리스트 좀더 깊게 알게 되는 계기가 되었음...😅 솔루션 class Solution: def permute(self, nums: List[int]) -> List[List[int]]: answer = [] nums_length = len(nums) if nums_length == 1: answer.append(nums) return answer def backtrack(answer_list): if len(answer_list) == nums_length: answer.a.. 2023. 3. 21.
[LeetCode] 17. Letter Combinations of a Phone Number 접근 난이도가 있는 문제는 아니지만 특수한 상황에 탐색 기법을 사용하여 솔루션을 작성할 수 있느냐를 묻는 문제 예제가 부실함. 3가지 이상의 예제도 좀 넣어주지... 솔루션 class Solution: def letterCombinations(self, digits: str) -> List[str]: answer = [] digits_length = len(digits) if digits_length == 0: return answer # create mapped list # this result dial list to be # ["", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"] dial = ["", ""] index = 97 for i.. 2023. 3. 20.
[LeetCode] 22. Generate Parentheses 접근 기본적인 백트래킹 문제, 문제 조건이 크게 까다롭지 않아 브루트 포스로 풀 수도 있지만 백트래킹 방법이 출제 의도인 것 같음 문제의 해답이 될 수 있는 경우에 대한 경우를 일반화해야 함. 여기서 막혔음 자연스럽게 중간에 오답이 되는 케이스는 흘려 보내는 논리 흐름이 백트래킹의 핵심 스택이 아닌 변수를 활용하여 괜찮은 솔루션을 작성할 수 있음 솔루션 class Solution: def generateParenthesis(self, n: int) -> List[str]: answer = [] def backtracking(answer_str, left, right): # if it reach to the end, add answer if len(answer_str) == n*2: answer.appen.. 2023. 3. 20.
[LeetCode] 19. Remove Nth Node From End of List 접근 두 커서(Two pointer) 개념을 링크드 리스트 문제에 적용시켜 푸는 문제 먼저 간 커서를 n 번 순회시켰을 때, None 인 경우와 그렇지 않은 경우를 모두 생각하여 솔루션을 작성해야 함 가능한 케이스를 모두 면밀히 고민해 볼 필요가 있음 솔루션 class Solution: def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]: cur_left, cur_right = head, head answer = cur_left for i in range(n): cur_right = cur_right.next if cur_right is None: return cur_left.next while cur_rig.. 2023. 3. 16.
[머신러닝] Prediction(예측)과 Inference(추론)의 차이 머신러닝을 공부하기 시작할 때 접하는 두 가지 개념이 있습니다. 예측과 추론인데요, 이 두 개념의 차이에 대해 명확히 이해해 보겠습니다. 예측과 추론 머신러닝에서의 예측은 '결과'를 중점으로 아는 것 추론은 원인과 결과의 '인과관계'를 중점으로 아는 것 으로 설명할 수 있습니다. 모델을 선택하는 기준 내가 머신러닝을 하는 목적이 예측인지 추론인지에 따라 적절한 모델을 선택할 수 있습니다. 내가 원하는 것이 무엇인지에 따라 머신러닝 모델이 달라집니다. 내가 예측을 하고 싶을 때 이해 가능성(Interpretability)이 낮은 SVM, Boosting과 같은 모델을 사용하는 것이 유리하며 (굳이 이해 가능성이 높을 필요가 없기에 유연성이 높은 모델을 채택하는 것이 유리), 내가 추론을 하고 싶을 땐 이해.. 2023. 3. 15.