목록전체 글 (56)
고양이발일기

Problem Solving Process 일단 든 생각은 절반으로 나눈 후, 알파벳 순으로 정렬을 해서 인덱스마다 다르면 카운트를 세주자! 였는데, 그렇게 하면 동일 알파벳 갯수가 여러개인 경우가 있으니, 불가능했다. 그래서 생각해낸 방법은 절반으로 나누어 s1, s2를 만들어서 s1 루프를 돌며 해당 항목이 s2에 있는지 확인하고 s1, s2에 있는 항목을 둘다 제거해주는 방법이다. 하지만,, list로 진행하다보니 time exceeded가 나는 것이어따... 그래서 list 보다 시간 복잡도를 줄일 수 있는 deque를 활용하여 풀어주었다! 확실히 remove 시간이 많이 줄은 것 같다. ( list - O(N) , deque - O(1) ) + 하지만 역시 고수들의 답은 또 달랐다. python..

Problem Solving Process 내가 푼 방법 1. head를 돌며 head 의 전체 length를 구해준다 2. head_length // 2 하여 중간 인덱스 값을 구한다. 3. head를 돌며 중간 인덱스 값 부터 return 한다. 하지만 .... 다른 풀이를 보니 더 천재적인 방법이 있었다. 투 포인터를 사용하여 P2와 P2.next 가 존재하는 동안 루프를 돌며 P1은 한칸씩 나아가고 (P1.next) P2은 두칸씩 나아간다 (P2.next.next) 그렇게 해서 P2 혹은 P2.next가 None이 될 때 까지 나아가면 P1의 값은 middle값이 된다. (전체의 절반이 middle값이므로) 보면서 정말 감탄했다 ㅋㅋㅋㅋㅋㅋ 대단한ㅅ ㅏ람들이야 ... ( •̀ ω •́ )✧ Sol..

Problem Solving Process 우선 문장에 기호가 섞여있기 때문에 1. 알파벳인지 구분을 해준다 2. rotate 되는 숫자(k)가 알파벳의 갯수 26개 이상으로 돌 수 있으니 나머지 값을 계산하여 더해준다. 3. 대소문자를 구분하여 아스키 코드의 min, max 값을 지정한다. 4. max 값을 넘으면 26을 빼준다. 이런식으로 풀었는데 2, 4번을 합쳐서 더한 후, 한 번에 26을 나눠 나머지값을 구하는 형식으로 푸는게 더 깔끔할 것 같다. Solution def caesarCipher(s, k): answer = '' for i in s: if i.isalpha(): k %= 26 rot = ord(i) + k (min, max) = (65, 90) if i.isupper() else ..

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 에 값을..