본문 바로가기

Coding Test103

[LeetCode] 206. Reverse Linked List [Python(파이썬)] '파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 (역순 연결리스트) 연결리스트를 뒤집어라. 2. 풀이 반복문을 이용한 풀이 3. 코드 반복문을 이용한 풀이 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reverseList(self, head: ListNode) -> ListNode: rev = None while head: tmp, head = head, head.next rev, rev.next = tmp, rev return rev 결과 .. 2021. 11. 23.
[LeetCode] 92. Reverse Linked List II [Python(파이썬)] '파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 (역순 연결리스트 II) 인덱스 left에서 right까지를 역순으로 만들어라. 인덱스 left은 1부터 시작한다. 2. 풀이 반복문을 이용한 풀이 start = left - 1, end = left left = 2, right = 4 s e s e s e 1->2->3->4->5 1->3->2->4->5 1->4->3->2->53. 코드 반복문을 이용한 풀이 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution.. 2021. 11. 23.
[LeetCode] 24. Swap Nodes in Pairs [Python(파이썬)] '파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 (페어의 노드 스왑) 연결 리스트를 입력받아 페어(pair) 단위로 스왑하라. 2. 풀이 반복문을 이용한 풀이 재귀를 이용한 풀이 3. 코드 반복을 이용한 풀이 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def swapPairs(self, head: ListNode) -> ListNode: if not head or not head.next: return head root = pre = ListNod.. 2021. 11. 23.
[LeetCode] 21. Merge Two Sorted Lists [Python(파이썬), JAVA(자바)] '파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 (두 정렬 리스트 병합) 정렬되어 있는 두 연결리스트를 합쳐라. 2. 풀이 반복문을 이용한 풀이 재귀를 이용한 풀이 3. 코드 (Python) 반복문을 이용한 풀이 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: head = tmp = ListNode(None) while l1 and l2:.. 2021. 11. 23.
[LeetCode] 2. Add Two Numbers [Python(파이썬)] '파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 (두 수의 덧셈) 역순으로 저장된 연결 리스트의 숫자를 더하라. 2. 풀이 + 연산을 이용한 풀이 리스트의 합이 10이 넘을 경우 다음 리스트의 연산에서 해당 값을 더한다. 3. 코드 +연산을 이용한 풀이 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: ret = head = ListNode.. 2021. 11. 23.
[LeetCode] 937. Reorder Log Files [Python(파이썬)] '파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 (로그 파일 재정렬) 로그의 가장 앞부분은 식별자다. 문자로 구성된 로그가 숫자 로그보다 앞에 온다. 식별자는 순서에 영향을끼치지 않지만, 문자가 동일할 경우 식별자순으로 한다. 숫자 로그는 입력 순서대로 한다. 2. 풀이 람다와 + 연산자를 이용한 풀이 isdigit()을 이용해 숫자와 문자 로그를 구분한다. 람다를 통해 식별자가 아닌 로그 부분을 먼저 정렬 후 식별자를 정렬한다. letters.sort(key=lambda x: (x.split()[1:], x.split()[0])) 문자열 [1:]를 통해 정렬을 하고, 동일한 경우 후순위로 식별자 [0]로 정렬한다. + 연산자를 통해 문자와 숫자 로그를 합친다. .. 2021. 11. 23.
[LeetCode] 819. Most Common Word [Python(파이썬)] '파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 (가장 흔한 단어) 금지된 단어를 제외한 가장 흔하게 동장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 쉽표 등) 또한 무시한다. 2. 풀이 정규식과 해시를 이용한 풀이 정규식에서 \w는 단어 문자를 뜻하며, ^은 not을 의미한다. 따라서 re.sub(r'[^\w]', ' ', 문자열)는 단어 문자가 아닌 모든 문자를 공백으로 치환한다. defaultdict(int)를 통해 단어의 빈도수를 저장한다. max함수를 통해 딕셔너리의 값이 가장 큰 key를 출력한다. max(dic.keys(), key=lambda k: dic[k]) key=lambda k: dic[k.. 2021. 11. 23.
[LeetCode] 561. Array Partition I [Python(파이썬)] '파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 (배열 파티션 I) 2n개의 수를 가진 배열을 n개의 페어를 이용한 min(a,b)의 합으로 만들 수 있는 가장 큰 수를 출력하라. 2. 풀이 슬라이싱을 이용한 풀이 배열을 정렬한다. 정렬된 배열에서 짝수번째 항목을 더한다. 배열이 [1,4,3,2] 일 때, (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4 이다. 슬라이싱 구문 [::2] 는 2칸씩 건너뛰므로 짝수번째 항목만 추출한다. 3. 코드 슬라이싱을 이용한 풀이 class Solution: def arrayPairSum(self, nums: List[int]) -> int: return sum(sorted(nums).. 2021. 11. 23.
[LeetCode] 238. Product of Array Except Self [Python(파이썬)] '파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 (자신을 제외한 배열의 곱) 배열을 입력받아 output[i] 가 자신을 제외한 나머지 요소의 곱셈 결과가 되도록 출력하라. *주의 : 나눗셈을 사용하지 않고 O(n) 에 풀어라. 2. 풀이 배열을 이용한 풀이 (출처) 자신을 제외한 왼쪽의 곱셈 결과를 넣는다. 자신을 제외한 오른쪽 곱셈 결과를 곱한다. 3. 코드 배열을 이용한 풀이 class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: ret = [] # 왼쪽 num = 1 for i in range(len(nums)): ret.append(num) num *= nums[i] # 오른쪽.. 2021. 11. 23.