티스토리 뷰
728x90
반응형
문제 요약
- 알고리즘 분류: LinkedList, 구현
- 난이도: Medium
- 문제내용:
- 0 사이에 값을 합쳐서 하나의 노드로 표현해라.
- 사이트 주소:https://leetcode.com/problems/merge-nodes-in-between-zeros/description/
문제풀이
이번 문제는 링크드리스트 노드 클래스나 구조체를 활용하는 문제이다. 노드클래스에 대한 이해도만 있으면 문제 푸는데는 어렵지 않다. 일단 아래그림처럼 처음에 나온 링크드 리스트에서 0사이 값을 합쳐서 다시 링크드리스트를 만들기만 된다.
그림을 보면 어떻게 구현 해야 할지 보일것이다. 그럼 구현은 아래처럼 하면된다.
- 노드 새로 인스턴스 한다.
- 다음노드가 끝있을때까지 반복문을 돌린다.
- 현재 노드가 0이 아니면 인스턴스한 노드에 값을 더하고 다음 노드로 이동한다.
- 현재 노드 0일때 새로 노드 인스턴스만들고 새로 만든 인스터스를 다음 노드로 지정하고 그 노드에 값을 추가하도록 한다.
이렇게 구현하면 시간복잡도는 노드개수 N개 라고 할때 O(N)만큼 나온다. 위 구현대로 한다고 해도 어떻게 구현 해야 할지 막막할수도 있다. 그래서 아래 코드를 참고하면서 보면 된다.
Code
Python
class Solution:
def mergeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:
nowNode = ListNode(0)
nextNode = head.next
resultNode = nowNode # 결과를 제출 하기 위해서 시작노드를 따로 지정한다.
while(True):
# 값이 0일때
if(nextNode.val == 0):
# 다음 노드 없을경우
if(nextNode.next == None):
break
# 다음노드 초기화한다.
nowNode.next = ListNode(0)
nowNode = nowNode.next
else:
# 현재 노드 값을 추가한다.
nowNode.val += nextNode.val
# 기존 노드 다음으로 이동한다.
nextNode = nextNode.next
return resultNode
Java
class Solution {
public ListNode mergeNodes(ListNode head) {
ListNode nowNode = new ListNode(0);
ListNode nextNode = head.next;
ListNode resultNode = nowNode;// 결과를 제출 하기 위해서 시작노드를 따로 지정한다.
while(true){
// 값이 0일때
if(nextNode.val == 0){
// 다음 노드 없을경우
if(nextNode.next == null){
break;
}
//다음노드 초기화한다.
nowNode.next = new ListNode(0);
nowNode = nowNode.next;
}else{
// 현재 노드 값을 추가한다.
nowNode.val += nextNode.val;
}
// 기존 노드 다음으로 이동한다.
nextNode = nextNode.next;
}
return resultNode;
}
}
728x90
반응형
'알고리즘 > Leetcode' 카테고리의 다른 글
[Leetcode]1007. Minimum Domino Rotations For Equal Row (0) | 2024.09.23 |
---|---|
[Leetcode]3271. Hash Divided String (0) | 2024.09.21 |
[Leetcode]983. Minimum Cost For Tickets (0) | 2024.08.20 |
[Leetcode]1038. Binary Search Tree to Greater Sum Tree (0) | 2024.08.18 |
[Leetcode]935. Knight Dialer (0) | 2024.08.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 이론
- java
- 동적계획법
- spring-boot
- 배열
- Greedy
- 그리디
- DP
- BaekJoon
- LeetCode
- level2
- Python
- 재귀호출
- 조합
- 문자열
- 백트레킹
- BFS
- 백준
- 알고리즘
- 넓이 우선 탐색
- 파이썬
- 그래프
- 누적합
- DFS
- Programmerse
- 수학
- 자바
- JSCODE
- 구현
- 동적 계획법
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함