inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)

K개의 정렬된 리스트 병합_Heap_코딩

Merge k Sorted lists 문제에서 p 관련 질문있습니다.

130

느낌아니까

작성한 질문수 12

0

개인적으로 자료구조 sort 같은거 java로 구현하면서 연습했었을 때부터 이해가 조금 안되었어서 질문합니다.

9분15초 경부터 p관련해서 말씀해주셨는데요.
43줄에 p.next = node; 는
처음에 p가 o 을 가리키고 있으므로, p.next는 poll()했던  node 1을 넣어서 저렇게 된건 이해가 가는데요.
이 직후에, p.next는 1을 가리키고 있고, p는 0을 가리키고 있잖아요.

그런데 44줄에 p = p.next; 에서는
p.next의 다음 포인터를 p(2번째 1)로 바꿔준다고 하셨는데, 이때 p는 0을 가리키고 있지 않나요?
그러므로, p.next.next를 새로운 p로 가르켜야 새로운 포인터 지정이 맞는거 아닌가요?

제 논리에서 어디가 틀렸는지 잘 모르겠고, 선생님께서 하신 표현방식이 잘 이해가 안되서 java의 '포인터개념' 에 대해서 여쭙고 싶습니다.


갑자기 질문을 작성하다가 문득 생각이 났는데,
1). p.next=node; 은 포인터라기보다는 그냥 p(0가리킴)의 next 자리에 node를 넣고,

2). p=p.next;는 그 node 넣은 p.next 자리를 p가 가리키도록 해라.

이게 맞나요..?ㅋㅋㅋ
선생님께서 말씀하신거 우선 생각하지 않고, 혼자서
생각해봤는데 갑자기 질문작성하다가 떠올라서 ..



+ 그리고 추가 질문으로,
main 메소드 부분에, ListNode[] list 를 크기가 3으로 설정한 후에 l1 l2 l3를 배열의 요소로 넣으셨는데, 배열의 요소(1개 단위)로 node가여러개 연결된(1-4-5 같은 리스트) 게 들어갈 수 있는 건가요?
배열의 타입형이 ListNode여서 그런건가요?

글이 두서가 없고 질문이 많아 죄송합니다. !!

java 코테 준비 같이 해요!

답변 2

0

느낌아니까

음 조금 헷갈리는데, p, p.next, node 가 ListNode로 다 같은 타입형이면 '포인트' 개념은 필요없는걸까요?


p.next = node; 는 poll한 node를 p.next 자리에 넣는것.
p = p.next;는 ListNode 타입의 p.next를 ListNode 타입의 p로 하겠다 !  
이렇게 정리했는데, 그럼 바꿔서

p.next = node; 는 ListNode 타입의 node를 ListNode 타입의 `p.next 로 하겠다라고 말해도 되는건가요..?

올려주신 소스코드에서 p, p.next, node 다 ListNode 타입으로 하셨는데,
자꾸 링크드 리스트 구조를 손으로 그려보면, node는 그냥 말그대로 node고
p 와 p.next는 pointer 같이 생각이 들어서요 ㅠㅠ!

0

푸샵맨 코딩스터디

1. 배열의 타입형이 ListNode여서 그런건가요?

네 배열타입을 ListNode로 방3개를 만들었습니다.

값은 ListNode타입 1-4-5,1-3-4, 2-6 이렇게 들어 있는거죠

2. 기본적으로 이해하실게 p 나 p.next 는 타입이 ListNode입니다 이 전제사항을 먼저 이해하시면 편합니다.(항상 명심해야죠.)

.next를 이용해서 한칸씩 다음 ListNode를 지정하는거죠. 우리는 이것만 이용합니다. 

아래 부분이 핵심이죠

p.next = node;

p = p.next;

먼저

p.next = node 

=> node의값을 현재 p.next에 넘깁니다 즉,  1-4-5 = 1-4-5 이렇게 되겠죠?(둘은 타입이 ListNode로 같죠)

p = p.next;

=> 이건 현재 p.next포인트가 p로 된다. while문이니까 next를 이용해서 p를 셋팅해주는거죠(다음 칸으로 이동 개념)

이부분이 헷갈리면 AddTwoNumbers를 보시면 됩니다. 

아래 검은 부분 보이십니까? 작업을 마치후에 p.next를 이용해서 다음 칸으로 이동하는거죠~

참고)

while(p1 !=null || p2 != null) {

if(p1 !=null) {

carry +=p1.val;

p1 = p1.next;

}

if(p2 != null) {

carry += p2.val;

p2 = p2.next;

}

p3.next = new ListNode(carry%10);

p3 = p3.next;

carry /=10;

}

강의자료에 나오는 m과 n의 범위가 코딩하고 다른거 같습니다

0

255

0

나선형매트릭스 깃허브에 코드가 없는것같아요

0

211

0

로그 파일의 데이터 재정렬 코드가 깃허브에 없어요!

0

225

0

새로 생긴 기초강의 질문드려요

1

377

1

질문드립니다

1

221

1

Unique Paths Integer 질문입니다

0

220

1

subString 방법으로 문제 풀이 영상은 짤린건가요?

1

254

1

DFS 방식으로 푼 것이 맞나요?

0

310

2

질문드립니다~

0

197

1

left if문에 대해서

1

257

1

오타 인가요?

1

238

1

안녕하세요 강사님

1

190

1

질문 드립니다

0

173

2

Queue&Stack 문제해설집 문의

0

184

1

문제분석 로직 질문

1

231

1

시간 복잡도 문의드립니다.

1

233

1

시간복잡도 질문드립니다.

1

204

1

for-each 문 질문있습니다!

0

295

1

강의영상에서 사용된 로그 메소드가 궁금합니다.

2

282

2

강의자료 + 문제 이해 관련 질문입니다

1

279

3

강사님 오류맞나요?

1

208

1

강사님 시간 복잡도에 대해서 질문드립니다.

1

174

1

질문입니다.

1

203

1

문제에 대한 이해

1

314

1