• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

문제에서 queue와 list의 초기화가 궁금합니다.

20.10.22 20:45 작성 조회수 147

2

Queue<TreeNode> queue = new LinkedList<>();
List<Integer> list = new LinkedList<>();

이와 같이 둘 모두 LinkedList로 초기화한 이유가 궁금해서 여쭤봅니다 ㅠ
그냥 PriorityQueue 혹은 ArrayList와 같은 것들로는
이 문제의 로직이 설명이 안되는 것인지 궁금합니다 ㅠ
어떻게 LinkedList로 바로 생각이 들까요?

답변 1

답변을 작성해보세요.

2

안녕하세요.

좋은 질문입니다.

먼저 질문 주신 내용중에

1.

Queue<TreeNode> queue = new LinkedList<>();

이와 같이 LinkedList로 초기화한 이유가 궁금해서 여쭤봅니다 

=> 저는 여기서 offer()메소드 써서 TreeNode객체를 넣을려고 합니다.

그리고 이걸 다시 뽑아내기 위해서 poll()를 이용할려고

Queue<TreeNode> queue = new LinkedList<>(); 이걸 이용한거죠

LinkedList 메소드는 말그대로 연결된리스트라 그거에 맞는 대표 메소드가 있어서 주로 offer(), poll()을 이용할려고 사용했습니다

만약

Queue<TreeNode> queue = new ArrayList<>(); 이렇게 하면 컴파일 에러가 납니다.

Queue<TreeNode> queue = new PriorityQueue(); 이렇게 하면 우선순위큐에 해당하는 방식으로 소팅을 해서

뽑아내니까  여기서는 쓰면 안되겠죠. max/minHeap 값들중에 최대/최소값을 Tree형태로 제일 높은곳에서 뽑아내서 리턴해주므로 방식이 완전히 다른 메소드들입니다.

2. 

List<Integer> list = new LinkedList<>();

이와 같이 LinkedList로 초기화한 이유가 궁금해서 여쭤봅니다 

=> 두번째는 List<Integer> list = new ArrayList<>(); 이렇게 해도 됩니다.

list. add()메소드를 써서 단순히 담기만 할것이기에

List<Integer> list = new LinkedList<>();

List<Integer> list = new ArrayList<>(); 

둘중에 아무거나 만들어서 add()메소드를 쓰면됩니다.

저는 강의할때는 List<Integer> list = new LinkedList<>(); 썼지만, 

git에는 List<Integer> list = new ArrayList<>();

이걸 썼네요.

3. 결론

내가 어떤 메소드를 쓸것인가?

이게 핵심인데요. 문제를 보면 대부분 정해져 있습니다.

키와 밸류형태로 담아보자 => Map<key, Value> map = new HashMap<>() 

대표 메소드 ,contain(), put(), get()..

키와 밸류형태인데 중복 제거해보자 => Set<key, Value> map = new HashMap() 

대표메소드 contain(), add()..

객체를 담아서 우선순위로 소팅해보자 => Queue<TreeNode> queue = new PriorityQueue();

next개념의 객체들을 순서대로 꺼내보자  Queue<TreeNode> queue = new LinkedList<>(); 

offer(), poll(),peek();

객체를 그냥 담아보자 List<XXX> list = new ArrayList<>();

add()

뭐 이런식이죠, 문제 풀이를 잘 보시면 쓰는것만 나옵니다. 그것만 먼저 이해하시면 될거 같네요