목록코딩테스트 (98)
거누의 개발노트
문제 괄호로 된 입력값이 올바른지 판별하라. 입력 '()[]{}' 출력 True 스택으로 풀이 def isValid(s: str) -> bool: if len(s) % 2 != 0: return False default = { ')':'(', ']':'[', '}':'{' } open = '({[' stack = [] for i in s: if i in opedn: stack.append(i) else: if not stack: return False if default.get(i) != stack.pop(): return False return not stack 리코드에서 확인 https://leetcode.com/problems/valid-parentheses/ Valid Parentheses - L..
문제 연결 리스트를 뒤집어라 입력 1->2->3->4->5->NULL 출력 5->4->3->2->1->NULL 작성한 코드 def reverseList(head): node, prev = head, None while node: # 1 2 3 next = node.next # 2 3 node.next = prev # Null 1 prev = node # 1 2 node = next # 2 3 return prev 책에 있는 코드 def reverseList(self, head) -> ListNode: # SOL 1) Recursive Way def reversef(node, prev=None): if not node: # node가 비어있는 경우 return prev next, node.next = n..
문제 정렬되어 있는 두 연결 리스트를 합쳐라 입력 1->2->4 1->3->4 출력 1->1->2->3->4->4 책에 있는 코드 class solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: if (not l1) or (l2 and l1.val > l2.val): l1, l2 = l2, l1 if l1: l1.next = self.mergeTwoLists(l1.next, l2) return l1 찾은 코드 # 이해하기 쉬운 풀이 def mergeTwoLists(list1, list2): if (list1 == None and list2 == None): return None head = result = ListNode()..
문제 n개의 페어를 이용한 min(a, b)의 합으로 만들 수 있는 가장 큰 수를 출력하라. 입력 [1, 4, 3, 2] 출력 4 설명 n은 2가 된다. ( 2개씩 묶어서 한쌍! ), 최대합은 min(1, 2) + min(3,4) = 4 작성한 코드 def array_pair_sum(nums: List[int]) -> int: sum = 0 nums.sort() for i, n in enumerate(nums): # 인덱스가 짝수 번째인 값의 계산 if i % 2 == 0: sum += n return sum 회고 아직 문법이나 어떤 함수를 써야할지 잘 몰라서 계속 검색하면서 풀었다. 그래도 이문제는 쉽게 이해가 되었던 것 같다. https://programmers.co.kr/learn/challeng..
문제 배열을 입력받아 합으로 0을 만들수 있는 3개의 엘리먼트를 출력하라. 입력 nums = [-1, 0, 1, 2, -1, -4] 출력 [ [-1, -1, 2], [-1, 0, 1] ] 작성한 코드 def threeSum(nums: List[int]): lists = [] for a in itertools.combinations(sorted(nums), 3): if sum(a) == 0: lists.append([*a]) rtn = [] for l in lists: if l not in rtn: rtn.append(l) return rtn 리코드에서 시간 초과가 나왔다. - 숫자가 많아지면 조합해야 할 숫자가 많기 때문에 초과된걸로 생각된다. 책에 있는 코드 def threeSum(nums: list..
문제 가장 긴 팰린드롬 부분 문자열을 출력하라. 팰린드롬? 회문 또는 팰린드롬은 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열 등이다. 보통 낱말 사이에 있는 띄어쓰기나 문장 부호는 무시한다. 예를들어 다시 합창 합시다, 소주 만병 만 주소 등이 있다. 입력 "babad" "cbbd" 출력 "bab" "bb" 작성한 코드 def logestPalindrome(s: str) -> str: def expand(left: int, right: int) -> str: # 팰린드롬 여부를 체크하며 포인터 확장 while left >= 0 and right
문제 문자열 배열을 받아 애너그램 단위로 그룹핑하라 애너그램? 일종의 말장난으로 어떠한 단어의 문자를 재배열하여 다른 뜻을 가지는 다른 단어로 바꾸는 것을 말한다. 고대 유대인들이 히브리어로 하곤 했고, 중세 유럽에도 큰 인기를 끌었다. 프랑스 궁정에서는 '왕을 위해 애너그램을 하는 사람'을 고용하기도 했을 정도다. 중세의 대표적인 어구전철은 라틴어로 된 아베 마리아 의 애너그램이다. 우리나라 말로는 '문전박대' 를 '대박전문' 으로 바꿔 부르는 단어 등이 있다. 입력 ['eat', 'tea', 'tan', 'ate', 'nat', 'bat'] 출력 [ ['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat'] ] 작성한 코드 def groupAnagrams(strs: List..
문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작..