2022년 03월 12일 토요일 - 칩 셔플 은근 어렵다잉...


오늘 올려볼 문제는 138번 Copy List with Random Pointer 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진 leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

이상한 예외처리 문을 적어서 더 빨리 풀 수 있는거 좀 늦게 풀었다..


입력


사진에서도 볼 수 있듯이 Linked List 하나가 입력으로 들어온다.



풀이 및 코드


주어진 Linked List를 깊은 복사하여 리턴하는 문제이다.


오늘은 처음부터 정답을 생각해냈다.

주어진 Linked List들을 ArrayList에 다 넣고 각 val을 ArrayList index로 바꾸어주었다.

그 후에 ArrayList에 들어있는 Node들에 next와 random 값을 업데이트 해주는 방식으로 구현했다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public Node copyRandomList(Node head) {
        if(head == null)
            return null;
        Node start = head;
        ArrayList<Node> arr = new ArrayList<Node>();
        for(int i = 0; head != null; i++)
        {
            arr.add(new Node(head.val));
            head.val = i;
            head = head.next;
        }

        head = start;
        arr.get(0).random = head.random == null ? null : arr.get(head.random.val);
        head = head.next;
        for(int i = 1; i < arr.size(); i++)
        {
            arr.get(i - 1).next = arr.get(i);
            arr.get(i).random = head.random == null ? null : arr.get(head.random.val);
            head = head.next;
        }

        return arr.get(0);
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘 문제는 내가 잘못된 예외처리 구문을 하나 넣어서 조금 시행착오를 겪었다.

하지만 금방 해결했다. ㅋㅋㅋㅋㅋ

내일 문제도 재밌는 문제가 나오길 바란다.


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

+ Recent posts