inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

기출로 대비하는 개발자 전공면접 [CS 완전정복]

Q. Array는 어떤 자료구조 인가요? (외 1문제)

배열의 삭제 시간복잡도

해결된 질문

633

akakakakak

작성한 질문수 83

1

배열의 삽입, 삭제 시간복잡도에 대해서 shift가 필요히니 O(n)이라고 하셨는데요.

삽입의 경우 해당 인덱스의 원소 값을 바꾸는 것이 아닌 기존 값을 유지하면서 새로운 값을 그 위치에 놓고자 한다면 O(n)이 맞겠습니다만

삭제의 경우 그냥 해당 위치를 초기화하면 되지 않을까요?

물론 말씀하신대로 쉬프트가 필요하다면 O(n)이 맞지만 삭제 연산에서 쉬프트가 필수적인가? 하는 의문이 있습니다.

면접 운영체제 기술면접

답변 1

0

개발남노씨

안녕하세요 현강님.

삭제를 할 때와 삽입을 할 때 모두 shift를 해야만 하는 이유가 있어요.

 

배열은 연속적이고 순차적으로 메모리에 저장되어야 한다는 정의 때문이에요.

왜 굳이 연속적이고 순차적으로 저장하냐라고 물으신다면, random access의 장점을 이용하기 위해 그렇게 정의를 한 겁니다.

 

물론 삭제할 때 굳이 땡기지 말고 빈자리(공석)으로 남기면 안되나? 라고 물으신게 맞으시죠??!

삭제 후에 빈자리가 생기면 굳이 땡기지(shift)말고 그냥 놔두면, 그곳에 있는 데이터를 잘 못 접근했을 때 생기는 문제등을 해결하기 위해 "이곳은 빈 곳입니다" 라는 라벨을 걸어둬야 할 거에요.

 

결국 여러가지 효율적인 문제때문에도 그렇고, 배열의 정의때문에도 삽입 삭제를 할 때는 연속적이고 순차적인 성질을 유지하기 위해 shift를 해줘야 합니다.

 

혹시 질문에 대한 답이 됐을까요~? 더 궁금한점이 있으면 편하게 질문주세요!

노션 접근이 안됩니다 ㅠㅠ

0

120

2

노션 공유 부탁드립니다.

0

58

2

노션 공유가 안됩니다!

0

152

2

프로세스가 많아질수록 segment table도 많아지는 건가요?

1

73

2

노션 공유가 사라졌습니다.

0

163

2

post 요청

0

56

1

http

0

64

1

mutex, semaphore와 deadllock

0

99

3

실행중인 프로세스는 메모리를 연속적으로? 아니면 불연속적으로 사용하나요?

0

72

1

노션 공유 요청 드립니다.

0

124

1

노션 공유 요청드립니다.

0

87

1

Dynamic Array와 Linked List의 시간복잡도에 대해서..

0

115

1

노션

0

110

1

질문이있습니다 선생님!

0

109

1

질문이있습니다 선생님!

0

99

1

질문이있습니다 선생님!

0

93

1

질문이있습니다 선생님!

0

163

2

질문이있습니다 선생님!

0

152

2

질문이 있습니다 선생님!

1

198

2

질문이 있습니다 선생님!

0

124

1

질문이있습니다 선생님!

0

88

1

질문이 있습니다 선생님!

0

109

1

질문이 있습니다 선생님!

0

91

1

물리적 메모리에 연속적으로 저장하지 않는 이유

0

133

1