본문 바로가기

반응형
SMALL

분류 전체보기

217. Contains Duplicate 정수 어레이가 주어진다. 어레이 내부 값이 적어도 하나이상 중복되는 값이 존재하면 True를 리턴하고 아니면 False를 리턴한다. solution 1. 어레이의 길이와 어레이를 set으로 만든 어레이셋의 길이를 비교한다. 같으면 중복값이 없는 것이고 있으면 중복값이 있는 것이다. set은 중복되게 저장하지 않기 때문이다. class Solution: def containsDuplicate(self, nums: List[int]) -> bool: num_set = set(nums) if len(nums) == len(num_set): return False else: return True 더보기
202. Happy Number 양수 n이 있다. n에 들어있는 각 숫자의 제곱을 더해서 1이나오면 True를 리턴한다. 서클이되거나 끝없는 루프를 돌게 되면 False를 리턴한다. solution 1. 무한 루프를 돌게 하고 그 안에서 합이 n이 되게 계속 반복한다. 그리고 내부에 n의 각 부분을 하나씩 돌면서 합을 찾고 합이 1이면 True를 리턴한다. 서클을 찾는 방법도 넣어야한다. 그 방법은 같은 숫자가 다시 돌아오면 서클이라고 할 수 있기 때문에 메모제이션을 활용하여 딕셔너리에 해당 값이 다시 들어온다면 False로 리턴한다. class Solution: def isHappy(self, n: int) -> bool: ck = collections.defaultdict(int) while True: if ck[n]: return.. 더보기
160. Intersection of Two Linked Lists 두개의 링크드 리스트가 있을 때, 두개의 링크드 리스트가 한 지점부터 인터섹션 되는 경우가 있다. 그 때 해당 인터섹션되는 지점부터의 링크드 리스트를 리턴하라. solution 1. 두개의 링크드 리스트를 리스트에 넣고 리버스하여 같지 않은 것이 있을 때 이전값이 해당 노드의 값이라고 생각했다. 하지만, 노드의 값으로는 판단할 수 없었고 노드의 값이 같아도 인터섹션이 되지 않는 경우도 있다. solution 2. 각 링크드 리스트를 처음부터 끝까지 가되, 처음 링크드 리스트를 처음부터 끝까지 갈 때 값이 아닌 링크드 리드스트 자체를 셋에 넣는다. 그 후, 다음 링크드 리스트를 순회할 때 해당 링크드 리스트가 링크드 리스트에 존재하는지 파악한다. 있으면 그 자리에서 리턴한다. class Solution: .. 더보기
141. Linked List Cycle 링크드 리스트가 순환하냐 묻는 문제. solution 1. 1개씩 다음 노드를 넘어감과 2개씩 다음 노드를 넘어감을 체크했을 때 1개씩과 2개씩 넘어가는 노드가 같아질 때가 존재할 때 순환한다고 생각한다. class Solution: def hasCycle(self, head: Optional[ListNode]) -> bool: slow = fast = head while fast and fast.next: fast = fast.next.next slow = slow.next if slow == fast: return True return False 조건은 2개씩 넘어가는 노드가 현재 그리고 다음이 존재하여야 순환한다고 생각한다. 아니면 순환하지 않는다고 리턴한다. 더보기
118. Pascal's Triangle 행의 수가 주어졌을 때 그 행의 길이만큼 파스칼의 삼각형을 만들어라. 파스칼의 삼각형은 각 수가 직전 수의 합으로 만들어진다. solution 1. 직전 수의 합은 인덱스로 본다면, 직전행의 동일한 인덱스의 수 더하기 직전행의 하나 작은 인덱스의 수를 더해서 해당 수가 만들어진다. 그리고 처음의 수와 마지막 수는 없는 수 더하기 1의 연속이므로 계속 1로 유지된다. 그렇기 때문에 처음과 마지막이 1로 유지될 수 있게 하는 방법도 필요하다. 그리고 시작의 수가 1이라는 점도 잊지 말아야 한다. 그렇기 때문에 1로 모든 행을 초기화 해놓고 첫 열과 마지막 열을 1로 초기화 할 수 있다. 그 후, 직전행의 동일한 인덱스의 수 더하기 직전행의 하나 작은 인덱스의 수를 더하면 해당 행의 수가 만들어지게 한다. c.. 더보기
101. Symmetric Tree 루트 노드를 기준으로 양쪽 노드가 거울을 바라보고 있는 형태를 띄는지 bool 값으로 결과를 보여라. solution 1. 왼쪽 노드와 오른쪽 노드를 재귀로 비교할 수 있다. 왼쪽 노드와 오른쪽 노드가 둘 다 없을 경우 양쪽이 동일한 경우니까 True를 리턴하고 왼쪽, 오른쪽 중 한 곳만 존재하지 않을 경우 False를 리턴한다. 그리고 왼쪽 오른쪽 노드의 값이 같고 왼쪽 오른쪽을 바꿔서 재귀를 하여 나온 결과가 서로 같을 경우 왼쪽과 오른쪽이 같다는 것이므로 True를 리턴한다. 그리고 그 외의 경우도 False를 리턴한다. class Solution: def isSymmetric(self, root: Optional[TreeNode]) -> bool: def same(R, L): if R is Non.. 더보기
94. Binary Tree Inorder Traversal 주어진 listnode를 중위 순회된 list로 변환하는 문제다. solution 1. 중위 순회는 현재 노드에서 왼쪽 노드를 먼저 순회한 후, root 노드를 순회한다. 그 후, 오른쪽 노드를 순회한다. 방법은 재귀를 이용하여 노드를 순회하도록 한다. class Solution: def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]: '전위 순회에서 중위 순회로 변경' def travel(node, li): if node: return travel(node.left, li) + [node.val] + travel(node.right, li) else: return [] return travel(root, []) 현재 노드가 존재하지 않을 .. 더보기
88. Merge Sorted Array 정수형 값을 가진 list 두개가 있다. nums1, nums2일 때, nums1의 수 중에서 0은 nums2의 길이만큼 들어있다. 이때, 0을 대체하여 nums2의 값이 들어가고 오름차순으로 nums1과 nums2가 합쳐진 결과를 구해라. solution 1. 그대로 nums1과 nums2를 더하고 정렬한다. 그 후, 0이 nums1에서 존재하면 제거하는데, nums2에서도 0이라는 값이 존재할 수 있다. 그렇기 때문에 nums2의 길이보다 작거나 같게, 다시 말해서 num2의 길이를 넘지 않는 선에서 nums1에서 0을 제거한다. 그러면 nums1에 존재하던 nums2의 자리인 0만 사라지게 된다. class Solution: def merge(self, nums1: List[int], m: int,.. 더보기

반응형
LIST