TIL

TIL_20230516

번잔중 2023. 5. 16. 23:49

오늘 할 일

  • LeetCode 데일리 문제 풀기
  • 공모전 기획 회의 - 오후 7시

오늘 배운 것

LeetCode 데일리 문제 풀기

  • 오늘의 문제: 24. Swap Nodes in Pairs(https://leetcode.com/problems/swap-nodes-in-pairs/)
  • 난이도: medium
  • 문제 조건
    • 연결리스트가 주어지고, 인접한 모든 두 개의 노드를 스왑한 후에 head를 반환한다. 목록의 노드 값을 수정하지 않고 문제를 해결해야 한다.(즉, 노드만 변경될 수 있음)
  • 문제 해결 과정
    • 1, 2번 / 3, 4번 / 5, 6번 ... 노드를 스왑하는데, 노드의 val는 건들지 말아야 한다.
    • 이를 위해서는 첫번째 노드를 저장한 것과 두번째 노드를 저장한 것을 같이 움직이면서 바꿔줘야 한다.
    • 우선 새로운 연결리스트를 만드는게 좋을 것 같다. 첫 노드는 아무 숫자(그래도 0 추천)나 넣어주고, 첫 노드의 next를 head로 연결해준다. (Example 1 기준, 0 -> 1 -> 2 -> 3 -> 4)
    • 그 후에 이전 노드를 체크하기 위해서 prev라는 ListNode 객체를 선언하고, dummy가 가리키고 있는 객체의 주소로 초기화해준다. 즉 prev가 0 -> ... -> 4의 시작점을 가리키게 된 것이다.
    • 이후 head와 head.next가 존재할 때만 반복문이 동작하도록 조건을 걸어주고, 홀수와 짝수번째 값을 저장한 뒤 스왑해준다. 이 때 일반적인 스왑과 다른 점은 prev.next가 even을 가리키도록 하고, odd.next는 even.next를, even.next는 odd를 가리키도록 바꿔준다. 즉 연결리스트의 시작점인 prev가 원래 가리키고 있던 1 대신 2를 가리키도록 만들고, 1은 2의 다음 노드인 3을 가리키고, 2는 1을 가리키면 연결리스트에서 자리가 바뀌는 것이다.
    • 이후 다음으로 자리를 바꿀 노드를 찾기 위해 prev에는 odd를, head에는 prev의 다음 값을 가리키도록 만들어준다. 반복문이 모두 수행된 이후 dummy의 next를 반환해주면 정답이다.

공모전 기획 회의 - 오후 7시

  • 관광 공모전에도 관심이 있어서 회의에서 잠깐 언급했지만 서울 공공데이터 공모전으로 다시 방향을 잡았습니다.
  • 집회, 예방접종, 서울 자취생 등 다양한 아이디어를 내고 관련 데이터를 찾아보았습니다.
  • 아직 완벽하게 정해지지 않아서 조금 더 찾아보고 목요일에 회의를 다시 진행하기로 했습니다.

느낀점

  • 역시나 또 연결리스트 문제가 나왔습니다. 두 개씩 노드를 뒤집어주는 문제였는데, 새로운 방식을 알게 됐습니다. 더미 노드를 하나 만들어주고, 이전 노드를 따로 저장해두면 노드끼리 swap이 수월해져서 복잡하지 않게 작성할 수 있었습니다.
  • 공모전 준비는 처음 해보는데, 생각보다 아이디어 선정에도 많은 에너지가 소모되는 것 같습니다. ㅎㅎㅎ
  • 이런 저런 핑계로 운동을 쉬었는데, 내일은 꼭 운동하겠습니다.

내일 할 일

  • LeetCode 데일리 문제 풀기
  • 운동하기 - 웨이트 트레이닝

'TIL' 카테고리의 다른 글

TIL_20230518  (0) 2023.05.18
TIL_20230517  (0) 2023.05.17
TIL_20230515  (0) 2023.05.15
TIL_20230514  (0) 2023.05.14
TIL_20230513  (0) 2023.05.14