인프런 커뮤니티 질문&답변

Kanto(칸토)님의 프로필 이미지
Kanto(칸토)

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

8주차 개념 #1. 펜윅트리(Fenwick Tree)

영화 수집 제 그림과 설명이 이해가지 않습니다..

해결된 질문

작성

·

330

0

https://postfiles.pstatic.net/MjAyMTA1MTNfNzIg/MDAxNjIwODgyMDkwMTI3._oXnW6b77oEMkcdomjgB8NMLStKeMWOmLgQl1rrNGHQg.ZGawtod2AJSOLywq734qeiWpcteLFDIEhcJ438xtc44g.JPEG.jhc9639/%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%93%9C132.JPG?type=w966

 

영화수집 # 문제해석이 이해가 가지 않습니다.

왼쪽에 3 Block이 하나 있고 2 Block이 3 두개 쌓아져 있습니다. 좌우 빨간 화살표가 의미하는 것과 오른쪽에 그림을 조금 더 상세히 설명해주실 수 있을까요..?

트리라는 것은 알겠는데, 작동하는게 이해가되지 않네요.

추가로 좌표 이동의 의미도 한번 더 설명부탁드리겠습니다.

감사합니다.

답변 2

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 칸토님 ㅎㅎ

왼쪽에 3 Block이 하나 있고 2 Block이 3 두개 쌓아져 있습니다. 좌우 빨간 화살표가 의미하는 것과 오른쪽에 그림을 조금 더 상세히 설명해주실 수 있을까요..?

>>

해당 부분은 문제에 있는 지문을 그대로 구현한 것입니다.

 

1번그림

1 2 3 4에서

2라는 것을 빼서 왼쪽으로 옮깁니다.

 

2번그림

1 3 4 에서

3을 빼서 왼쪽으로 옮깁니다.

 

문제의

보고 싶은 영화가 있을 때는, DVD의 위치를 찾은 다음 쌓아놓은 콜렉션이 무너지지 않게 조심스럽게 DVD를 뺀다. 영화를 다 본 이후에는 가장 위에 놓는다.

이러한 로직을 구현해야 하기 때문입니다.

 

추가로 좌표 이동의 의미도 한번 더 설명부탁드리겠습니다.

>>

예를 들어 그냥 0 ~ 1000까지의 인덱스를 가진 배열에서 왼쪽으로 이동한다는 로직을 구현하려면 어떻게 해야할까요?

물론 1000에서 999까지는 괜찮죠.

그러나 0 인덱스에서 왼쪽은?

-1이 되게 됩니다.

그렇기 때문에 인덱스를 양수화 시키기 위해서

좌표이동이라는 개념이 필요합니다.

0 ~ 1000으로 하는것이 아니라

1001 ~ 2000으로 배열의 인덱스를 이동시키고

1001 >> 1 이런식으로 이동을 해서 왼쪽으로 이동하는 것을 구현하는 것입니다.

감사합니다.

Kanto(칸토)님의 프로필 이미지
Kanto(칸토)
질문자

큰돌님~ 이게 큰돌님이 설명하시는 체계랑 제가 이해하는 체계가 다른것 같습니다.

해당 부분은 문제에 있는 지문을 그대로 구현한 것이라고 하셨는데,

3번 블락이 왼쪽에 하나, 2번 블락이 오른쪽에 두개 쌓아져 있는 부분을

어떻게 아래 내용으로 1 2 3 4 에서 2라는 것을 빼서 왼쪽으로 옮긴 것인지가 지금 이해가안가는 포인트입니다. 제 머리에서는 2번 블락이 오른쪽에 있고, 두 개의 2번 블락의 아래쪽에 있다가 왼쪽으로 이동한 것으로 그려지기 때문입니다. 혹시 문제의 "지문" 이라고 표현하신 것이 3653 문제의 예제 1을 설명하는게 아닌걸까요? 제가 다른 맥락으로 지금 문제를 읽고 있는 것이라면 그게 잘 못된 것일 수도 있을 것 같아요.

1번그림 (영화 수집 # 문제 해석이라고 된 노란 그림 맞을까요?)

1 2 3 4에서

2라는 것을 빼서 왼쪽으로 옮깁니다.

 

아래 2번 그림도 제 눈에는 1번 블락이 세개 , 2번 블락이 한 개 , 3번 블락이 두 개, 4번 블락이 세 개로 되어있는데, 혹시 저와 큰돌님이 다른 그림을 이야기한 걸까요?

2번그림 (영화 수집 # 문제 해석이라고 된 노란 그림 맞을까요?)

1 3 4 에서

3을 빼서 왼쪽으로 옮깁니다.

큰돌님의 프로필 이미지
큰돌
지식공유자

음.. 제가 예제1을 설명했다기보다는 문제 지문을 저런 원리로 해석했다고 보시면 됩니다.

예제 1을 기준으로 설명을 드려보겠습니다.

5 3
4 4 5

에서.

1 2 3 4 5

이렇게 쌓여져 있죠?

여기서.

1)

4번을 끄집어 냅니다.

1 2 3 4 5

>>

4 1 2 3 5

이렇게 되죠? 이러면서 4번을 끄집어낼 때 4번보다 위에 있는 갯수는 3개입니다.

 

2)

다시 4를 왼쪽으로 옮깁니다.

4 1 2 3 5

이 때 0개입니다.

그 다음.

5를 옮깁니다.

 

5 4 1 2 3

이렇게 되죠?

옮길 때는 4개가 위에 있기 때문에 4가 되므로.

정답은.

3 0 4 가 됩니다.

 

이렇듯. DVD가 위에 쌓아져있고 위쪽으로 옮긴다는 것을

>>

배열의 왼쪽으로 쌓는다.

 

로 구현했다고 보시면 됩니다.

 

감사합니다.

0

Kanto(칸토)님의 프로필 이미지
Kanto(칸토)
질문자

큰돌님 설명은 이해 되었습니다! 그림을 자꾸 이해하려고 하다보니 손가락이 가르키는 달은 안보고 손가락만 봤던거 같네요. 감사합니다.

(그래도 그림은 여전히... 이해가 안됩니다.ㅎㅎㅎㅎ)

image

Kanto(칸토)님의 프로필 이미지
Kanto(칸토)
질문자

지금 이해 됐어요.. ㅋㅋ 왼쪽 오른쪽 그림이 따로 있는게 아니라.... 오른쪽에 있는 것들이 왼쪽으로 옮겨간 것이었어요!!! ㅎㅎ

Kanto(칸토)님의 프로필 이미지
Kanto(칸토)
질문자

1,2,3,4

2,1,3,4

3,2,1,4

큰돌님의 프로필 이미지
큰돌
지식공유자

ㅎㅎ 이해되셨다니 다행이네요 ㅎㅎ

또 질문 있으시면 질문 부탁드립니다.

 

감사합니다.

Kanto(칸토)님의 프로필 이미지
Kanto(칸토)

작성한 질문수

질문하기