[TIL]20210826

박창현·2021년 8월 26일
0

TODAY I LEARNED

목록 보기
35/53

알고리즘

24. Swap Nodes in Pairs (leetcode)

    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        cur = head
        
        while cur and cur.next:
            cur.val, cur.next.val = cur.next.val, cur.val
            cur = cur.next.next
        return head

연결리스트를 페어단위로 스왑하는 풀이중에서 이풀이는 하나의 값으로 구성된 리스트이기때문에 값만 변경하는 단순한 구조로 스왑이 가능하다.

  1. 하지만 연결리스트 자체를 바꾸는 풀이는 복잡하다. 리스트의 next가 가리키는 곳도 수정해야하기 때문.
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        root=prev=ListNode(None)
        prev.next=head
        
        while head and head.next:
            b=head.next
            head.next=b.next
            b.next=head
            
            prev.next=b
            
            head=head.next
            prev=prev.next.next
        
        return root.next

root=prev=ListNode(None) 파이썬은 함수가 고유 값을 저장하는 것이 아닌 방향표시를 하는 역할이기에 root와 prev는 같은 ListNode(None)을 가리킨다. 그림 하단부 우측을 보면 다시 이해하기 쉬울듯.

밑의 코드들은 val값과 next값을 변경하는 코드들이다. 손코딩으로 따라가면 이해가 됨.

root는 val은 비워져있고 next에서 순차적으로 스왑된 코드가 나옴으로, root.next를 리턴함.

  1. 재귀 구조로 스왑하는 법에 설명되어있지만, 백트래킹에 대한 설명이 12장, 328p에 나와있어, 이후에 학습예정.

328. Odd Even Linked List (leetcode)

odd = head
        even = even_head = head.next 
        
        while even and even.next:
            odd.next, even.next = odd.next.next, even.next.next 
            odd,even = odd.next, even.next
            
        odd.next=even_head
        return head

문제 설명이 "홀수 노드 다음에 짝수 노드가 오도록 재구성 해라" 라서 홀 짝 분류인줄 알았는데, 홀수 번째, 짝수 번째 노드 였다.

--328 이해 제대로 못함. 다시풀기.

10825. 국영수 (백준)

N=int(input())

a = [list(input().split()) for _ in range(N)]

a.sort(key = lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0]))
## sort key에 -가 있으면, 역순처리. key가 여러개있는건 앞 조건에서 대소 구분을 할수없을때 다음 조건으로 정렬.
for student in a:
    print(str(student[0]))

1920. 수 찾기 (백준)

import sys

sys.stdin.readline()
a = list(map(int,sys.stdin.readline().split()))
sys.stdin.readline()
b = list(map(int,sys.stdin.readline().split()))


for i in range(len(b)):
  if b[i] in a:
    sys.stdout.write("1\n")
  else:
    sys.stdout.write("0\n")

JS

document

html문서를 불러오는 object. 즉 . 을 통해 여러가지를 할수 있다.

getElementById('id'), getElementsByClassName('className') 를 통해 요소를 선택할 수있지만, 같은 id나 클래스의 element 를 여러개 가져오면array로 가져와지고(어떤 By~~는 단일인자를 가져와도 array이긴하다.) , 그러면 . 으로 무언가를 하는 것이 불가능하다.

그렇기에 (".클래스이름") || ("#id이름") 을 이용해서, querySelector, querySelectorAll을 이용하면 좋다.

이를 이용하면 array로 가져오지 않기때문에 . 의 기능을 사용할 수 있다. 또한, querySelector를 이용하면 ("#title h1")등으로 하위선택도 가능하다!
또한, document.querySelectorAll("div.hello h1")[2]; 식의 접근으로 같은 클래스에서 몇번째 것을 선택할지 고르는 것도 가능하다.

addEventListener()

선택된_요소.addEventListener("click", function_a);
를 이용하면 클릭할 때 미리 정의된 function_a()가 실행된다. () 가 함수를 "실행"하는 역할을 한다고 가정했을때, Listener에서 클릭을 감지하면 function_a 뒤에 ()를 붙여준다고 생각하면 된다.

addEventListener("A",function) 대신
onA = function; (ex. onclick)으로도 같은 역할을 수행한다.
하지만, addEventListener 을 이용하면 나중에 removeEventListener 을 사용할 수 있기에 이 코드가 더 유용하고 볼 수 있다.

profile
개강했기에 가끔씩 업로드.

0개의 댓글