일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UML
- 세그먼트 트리
- equals
- 백준
- docker
- JPA
- 파이썬
- 이펙티브 자바
- 자바
- 헥사고날 아키텍처
- spring security
- ddd
- 스프링
- 비트마스크
- java
- springboot
- 알고리즘
- disjoint set
- 다익스트라
- 위상정렬
- Redis
- DP
- series
- 포트앤어댑터 아키텍처
- dfs
- 데이터 flow
- BFS
- 문자열
- pandas
- dataframe
- Today
- Total
코딩못하는사람
카카오 인턴십 3]표 편집 (이중 연결 리스트) 본문
https://programmers.co.kr/learn/courses/30/lessons/81303
코딩테스트 연습 - 표 편집
8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO"
programmers.co.kr
1.접근
삭제와 삽입 연산이 잦으므로 배열이나 일반 ArrayList가 아닌 LinkedList를 사용해야겠다고 생각했다.
하지만 LinkedList를 이용한 풀이는 시간초과를 받았는데 Up 과 Down이 잦은 문제라 그랬다.
단방향 LinkedList는 한칸 앞(이전 노드)으로 이동하려면 처음(head)부터 리스트를 다시 타고 와야하기 때문에 이중 연결 리스트를 사용해야 한다.
2.풀이
이중 연결 리스트의 특징을 잘 살려서 코드를 짜야한다.
이전 노드를 저장하는 pre_array와 다음 노드를 저장하는 next_array 두개의 배열을 만들어 초기화 해준다.
ex) n=5
pre_array=[-1,0,1,2,3] ,next_array=[1,2,3,4,5]
다음과 같이 정해주면 (-1~0~1) (0~1~2) (1~2~3) (2~3~4) (3~4~5) 의 다섯 노드가 완성된다.
맨 첫노드 head의 값은 -1로 정해주고 마지막 노드의 꼬리값 tail 은 n으로 정해진다.
이렇게 초기화를 완료했다면 반복문을 통해 명령어를 받으면서
"U" 명령어일때는 왼쪽 링크를 타고 X번 이동하고 "D" 명렁어일때는 오른쪽 링크를 타고 X번 이동한다.
중요한건 "C"와 "Z"이다.
"C"명령어가 나오면 현재 인덱스의 노드를 삭제해야한다. 삭제된 노드는 최신순으로 Z에서 불러오므로 Stack에 넣어놓자.
C명령어가 나오면 인덱스 이전의 노드의 next값을 현재 삭제해야할 노드의 next값으로 변경해주고
다음 노드의 pre값을 현재 삭제해야할 노드의 pre값으로 변경해주면 삭제가 완료된다
Z 명령어가 나오면 스택에 들어있는 노드를 후입선출로 가져온다.
스택에서 가져온 인덱스의 next값에 들어있는 pre값을 인덱스의 pre로 설정해주고
인덱스의 pre값에 들어있는 next값을 인덱스의 next값으로 설정해주면 삽입이 완료된다.
3.코드
4.배운점
간만에 자료구조 책을 펴서 이중 연결 리스트를 다시 공부했다. 배워놓고 잘 써먹은적이 없어서 까먹었는데 이번 기회에 잊지 말자.
그림출처
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=holy_joon&logNo=221583745847
'백준 문제풀이(JAVA,Python)' 카테고리의 다른 글
1800 인터넷 설치( 다익스트라 ,이분탐색) (0) | 2021.10.03 |
---|---|
22115 창영이와 커피 [DP] (0) | 2021.08.18 |
22116 창영이와 퇴근[priority queue,Binary Search] (0) | 2021.08.18 |
19584 난개발 (누적합,TreeSet) (0) | 2021.06.30 |
1339 단어수학 (0) | 2021.02.22 |