목록알고리즘 (15)
고양이발일기

Problem Solving Process head를 돌면서 새로운 노드를 만든다 그리고 새로운 노드의 val을 head.val로 설정하고 next의 값은 전에 만들었던 노드로 연결한다. + 정석의 방법은 next의 방향을 뒷 노드로 바꾸는 것 !! Solution # 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: Optional[ListNode]) -> Optional[ListNode]: curr = answer = ListNode() whil..

Problem Solving Process 각 원소들 간의 차이가 가장 작은 걸 선택을 해야하니.... 처음에는 2중 포문을 사용해야하나 싶었다. 하지만 너무 비효율 적인 것 같아 생각해보니 차이가 가장 작으려면 sorted 된 상태이면 각각의 옆 얘들 만이 가장 작은 상태를 뽑아낼 수 있는 것 같다는 생각이 들었다. 그래서 1. sort 를 시킨다 2. 다음 인덱스와의 차이를 구해 abs 함수를 사용해 절댓값을 구한다 3. 현재 인덱스 값이 마지막 인덱스라 다음인덱스가 없으면 0번째 인덱스와 차를 구한다. 4. min 값과 비교해 해당 값보다 작으면 min 값을 그 값으로 바꿔준다 Solution def minimumAbsoluteDifference(arr): arr.sort() length = len..

Problem Solving Process linked list 의 merge 하는 방법이다. 이거는 먼저 linked list를 먼저 이해하는 것이 우선인 것같다. list1 을 출력해보면, ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 4, next: None}}} 와 같이 나오는 것을 확인할 수 있다. 즉, 현재 가르키고 있는 head 의 값인 val 와 다음을 가르키는 정보 next가 들어있는 것이다. 이를 사용하여, list1과 list2 중 하나가 소진 될 때 까지 돌면서 크기를 비교하며 새로운 linked list에 값을 넣다가 마지막에 남은 list 의 값을 넣어주는 것으로 끝내면 된다. 물론 새로운 linked list 에 값을..

Problem Solving Process 타워의 높이는 일정하므로, 타워의 갯수가 짝수인지 홀수 인지 따지면 된다. 타워의 갯수가 짝수 => p1이 무조건 선공이기 때문에 p2가 우승 타워의 갯수가 홀수 => p1이 우승 물론 상대가 이길 수 있는 결론이 나온다해도, 각각은 최적의 수로 이길 수 있게 짜여져 있기에 자신이 지도록 실수를 하는 일은 없다. 또한 여기서, 타워의 높이가 1인 경우는 무조건 p2가 이기므로, 이 경우의 수만 처리해 주면 된다. Solution def towerBreakers(n, m): return 2 if n%2 == 0 or m == 1 else 1

Problem Solving Process 나는 s 안에서 한글자 씩 for 문을 돌며 t 에 있는지 검사를 하여 있으면 찾은 index 뒤로 t를 자름. 없으면 False 리턴 하여 전부 다 통과하면 True를 리턴하는 형식으로 짰다. + 오늘 알고리즘 스터디를 하며 deque, two pointer 로 풀었던 친구들 코드 설명을 들었다! deque로 popleft()함수를 사용하면, list 에서 pop을 사용하는 것보다 시간 복잡도가 덜 든 다는 사실도 배웠다. deque - O(1) list - O(n) //재정렬의 문제 Solution class Solution: def isSubsequence(self, s: str, t: str) -> bool: for i in s: if i in t: t ..

Problem Solving Process 주어진 배열을 Sort 하고, for 문을 돌면서 diff 값을 비교하여 minimum 값을 찾으며 새로운 min 값이면 redefine, 같은 min 값이면 add 해주는 식으로 진행하였다! Solution def closestNumbers(arr): arr.sort() length = len(arr) min = sys.maxsize ans_arr = [] for i in range(length): if i != length-1: diff = arr[i+1] - arr[i] if min > diff: min = diff ans_arr = [arr[i], arr[i+1]] elif min == diff: ans_arr.append(arr[i]) ans_arr.a..