-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
문제에서 queue와 list의 초기화가 궁금합니다.
20.10.22 20:45 작성 조회수 147
2
Queue<TreeNode> queue = new LinkedList<>();
List<Integer> list = new LinkedList<>();
이와 같이 둘 모두 LinkedList로 초기화한 이유가 궁금해서 여쭤봅니다 ㅠ
그냥 PriorityQueue 혹은 ArrayList와 같은 것들로는
이 문제의 로직이 설명이 안되는 것인지 궁금합니다 ㅠ
어떻게 LinkedList로 바로 생각이 들까요?
답변을 작성해보세요.
2
푸샵맨 코딩스터디
지식공유자2020.10.23
안녕하세요.
좋은 질문입니다.
먼저 질문 주신 내용중에
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()
뭐 이런식이죠, 문제 풀이를 잘 보시면 쓰는것만 나옵니다. 그것만 먼저 이해하시면 될거 같네요
답변 1