inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

BFS 질문 있습니다.

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (심화편)

let visited_vertices = []; visited_vertices[vertex.value] = true; BFS에서 visited_vertices를 위처럼 배열로 설정하신 이유가 따로 있나요?? 동작은 하는 것 같은데, 콘솔찍어서 보니까 배열에 저렇게 담겨져 있는게 뭔가 어색하기도 하고 DFS에서는 객체로 하셨더라구요. [ Ben: true, Jake: true, Ivy: true, Anna: true, David: true, Joy: true, Elin: true, Owen: true ]

  • 알고리즘
  • algorithm
김상민 댓글 1 좋아요 1 조회수 261

동적배열 7:35

미해결

코딩테스트 [ ALL IN ONE ]

안녕하세요! 동적배열 강의관련 질문드립니다. 정적배열과 동적배열의 시간복잡도를 비교하는 표에서, 정적배열의 데이터 추가/삽입(insert_back/insert_at)이 이해가 안 되어 질문드립니다. 정적배열은 선언과 동시에 크기가 정해지는데, 이미 초기화가 된 상태에서 추가나 삽입은 안 되지 않나요? 혹시 크기만 선언된 비어있는 정적배열을 말하는건가 생각해보니, 비어있는거면 insert_at이나 delete_at을 할 때도 기존 데이터를 옮길 필요가 없으니 O(n)이 아니라 O(1)이지 않나싶어서 그건 아닌 것 같고, 아니면 크기보다 데이터가 덜 들어간 케이스에서 저런 시간복잡도가 나오는건가요? ㅠㅠ 그렇다면 저게 다 이해가 됩니다. 그런데 아무리 그래도 정적배열에서는 추가/삽입의 한계가 있지 않나요? 어떤 조건에서 저게 되는건지 알려주세요ㅠㅠ

  • algorithm
  • 코딩-테스트
  • 코테 준비 같이 해요!
  • 알고리즘
  • python
데브츄 댓글 1 좋아요 1 조회수 358

else if 질문 있습니다.

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (심화편)

힙 삽입에서 getInsertingParent(){ if(this.lastInsertedNode.getParent() == null){ return this.lastInsertedNode; }else{ if(this.lastInsertedNode == this.lastInsertedNode.getParent().getLeftSubTree()){ return this.lastInsertedNode.getParent(); }else{ let current = this.lastInsertedNode; let firstRightSibling = null; while(current.getParent().getParent() != null){ current = current.getParent(); firstRightSibling = this.getRightSibling(current); if(firstRightSibling != null){ break; } } 마지막으로 삽입된 노드가 루트노드일때를 if문으로 처리하시고 그다음 else 안에 서 if문으로 다시 처리하셨는데 이유가 있을까요? else if로 안쓰시고 else 안에서 if를 쓰신 이유가 궁금합니다..!!

  • 알고리즘
  • algorithm
김상민 댓글 2 좋아요 1 조회수 390

시간복잡도 질문

해결됨

코딩테스트 [ ALL IN ONE ]

안녕하세요 강사님 알찬 강의 구성으로 재미있게 강의를 듣고 있습니다. 다름이 아니라 시간 복잡도에 대해서 여쭤보고 싶은게 있어서 글을 남깁니다. 현재 완전탐색을 하게 되면 시간 복잡도가 n2이 된다고 하셨는데, 두번째 반복문 조건을 j = i+1 로 설정하는 순간부터 n2이 아니라 n log n이 되는 것이 아닌가 싶어서요. 만약 nums의 길이가 5라면 최악의 경우에도 반복문이 전체가 돌아간다면 ( 4+ 3+ 2+ 1 ) = 10번으로 n2 = 25일때보다는 획기적으로 줄어드는 것 같아요! 5의 경우에도 절반 이하로 줄어들었는데 숫자가 커지면 커질수록 기하급수적으로 줄어들 것으로 보이는데, 혹시 제가 잘못 생각하고 있는 걸까요? ㅠㅠ

  • 코테 준비 같이 해요!
  • 코딩-테스트
  • 알고리즘
  • algorithm
  • python
밤의멜로디 댓글 1 좋아요 2 조회수 508

이해가됐습니다...

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

강의를 보면서 왜 갑자기 count 1이 2가 되지 했는데 hanoi 함수가 스택에 쌓이면서 count가 2이었던 함수 3이었던 함수가 끝이 안났기 때문에 계속 count가 올라갔던거군요. 이거 때문에 분명 count 1인 상태로 함수가 끝났는데 갑자기 2이었던 함수가 왜 시작되는지 의아했습니다. 동영상 5번 반복적으로 보니깐 이제야 이해되네요! 감사합니다!

  • 알고리즘
  • algorithm
개발 까마귀 댓글 1 좋아요 2 조회수 578

하위문제 하향식 계산이 정확히 뭔지 모르겠습니다.

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

하위문제란 마지막 원소를 제외하고 나머지 원소를 하위문제인걸까요? 하향식 계산이라는거는 증가 계산이 아닌 감소 계산인걸까요? + => 상향식, - => 하향식? 이러한 점 때문에 재귀 이해가 더 안되네요 ㅠㅠ

  • 알고리즘
  • algorithm
개발 까마귀 댓글 1 좋아요 1 조회수 395

34강 얕은 복사 깊은 복사 관련 문의

해결됨

실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지

안녕하세요 34강에서 Assignment, Shallow Copy, Deep Copy 강좌의 마지막 부분에 링크를 통해 블록도로 설명해주신 부분이 쉽게 이해가 됐는데요. 관련 링크 좀 공유해주실 수 있을까요?

  • 알고리즘
  • algorithm
  • python
jaywon 댓글 1 좋아요 1 조회수 525

동적배열 8:23

미해결

코딩테스트 [ ALL IN ONE ]

안녕하세요. 그림부분에서 이해가 가지않아 질문 드립니다. a =[1,2,3] 으로 초기화를하면 array는 0,1,2 즉 배열 그림이 3칸([][][])만 있어야 하는게 아닌가요? 하지만 강의의 그림에서는 [1][2][3][][] 으로 0,1,2,3,4 까지 그려져 있습니다. (size가 3인데 말이죠) a.append(4) 를 했을때, 동적배열은 array로 구현이 돼어있기때문에 random access 가 가능하여 마지막 index를 찾을 수 있다고 하셨는데, 선언및 초기화 a = [1,2,3] // 그림 -> [1][2][3] 접근 a[0] // O(1) 수정 a[1] = 9 // 그림 [1],[9],[3] 추가 a.append(4) // 이때 Resizing 이 일어나 /* 그림 [1][9][3] // 값을 옮긴 후 삭제 [1][9][3][4][][] // 복잡도 O(n) */ 의 모양이 돼야하는게 아닌가요? 즉, 궁굼한 점은 선언 및 초기화 할때 배열의 size 는 3인데그림의 배열 size는 [][][][][] 5칸이냐는 것입니다.

  • python
  • 알고리즘
  • 코테 준비 같이 해요!
  • algorithm
아요 댓글 1 좋아요 1 조회수 384

연결리스트(Linked List)-1 전반적인 코드

미해결

코딩테스트 [ ALL IN ONE ]

서론 class Node: def __init__(self, value=0, next = None): self.value = value self.next = next first = Node(1) second = Node(2) third = Node(3) first.next = second second.next = third first.value = 6 위 코드는 연결리스트-1 강의에 등장하는 코드입니다. first = Node(1) first.next = second first.value = 6 위 3개의 코드 모두 "=" 이라는 할당 연산자를 통해서 데이터를 변수에 저장 하고 있는데요. "first가 Node(1)을 가리킨다" "first.next에는 주소가 저장된다." "first.value에는 6이 저장된다." 뭔가 여기서 저는 뇌에서 뭔가 이상한데(?)라고 느겼습니다. first, first.next , first.value 라는 변수에 모두 "="이라는 동일한 할당 연산자를 사용 함에도 불구하고, "가리킨다" "값을 저장한다" "주소를 저장한다" 파이썬이 천재인가? 동일한 할당("=")연산자인데, 어쩔 때는 알아서 가리키고 , 어쩔 때는 알아서 주소을 저장 하고, 또 어쩔 때는 값를 저장 한다 질문1 위 그림을 토대로 말씀드리자면, 1."가리킨다" → D관점 2."값을 저장한다" → C관점 3."주소를 저장한다" → A관점 결국엔 다 " 동일한 의미" 를 다르게 표현하고 있다는 사실입니다. first= Node(1) 실제로는 first에 Node(1)의 번지인 100번지(가정)가 저장되어 100번지에 저장되어 있는 Node(1)객체를 가리키는 것 이고, second=Node(2) 실제로는 second에 Node(2)의 번지인 200번지(가정)가 저장되어 200번지가 저장되어 있는 Node(2)객체를 가리키는 것 이고, first.next = second second에 저장되어 있는 200번지 즉 주소를 first.next에 저장 해서 결국엔 first.next가 Node(2)를 가리키게 되는 것이고, first.value에 600번지(가정)가 저장되어 6을 가리키고 있으나 C관점에서 "first.value에는 6이 저장"되어 있다 라고 표현하고 있는 것 같습니다. 제가 이해한 게 맞나요?? 결국 다 동일한 의미인 거죠? <질문의도> 분명히 저와 같은 생각하시는 분이 계실 것으로 생각됩니다. 저도 연결 리스트 처음 배울 때 파이썬이 천재인가 어쩔 때는 "값"을 저장하고, 어쩔 때는 "가리킨다"라고 표현하고, 어쩔 때는 "주소"를 저장한다라고 표현하고, 이 내용이 다른 분들한테 조금이라도 도움이 됐으면 좋겠습니다.

  • 알고리즘
  • 코테 준비 같이 해요!
  • algorithm
  • python
똑같이썼는데안돼 댓글 1 좋아요 2 조회수 749

연결리스트 질문입니다.

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

선생님 안녕하세요. 질문이 있습니다. 1️⃣ insertAt() 함수에서 에러 처리할 때 if(index > this.count) 마지막 인덱스에 데이터가 삽입이 될 수 있어서 초과로 한걸까요? deleteAt(), getNodeAt() 함수에서 에러 처리할 때 if(index >= this.count) 마지막 인덱스가 없기 때문에 이상으로 한걸까요? 헤깔려서 정리하면서 여쭤봅니다. 2️⃣ insert 함수 만들 때와 다르게 delete, getNode 함수 만들 때 return 한 이유가 궁금합니다. 강의를 반복해서 듣는데. 헤깔리는게 자꾸 생기네요ㅜ..ㅎ

  • 알고리즘
  • algorithm
이동근 댓글 1 좋아요 2 조회수 503

선생님 안녕하세요~~ 연결리스트 중 질문입니다.

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

안녕하세요. 선생님! 손코딩하면서 연결리스트를 다시 듣고 있습니다. 기본 개념인 것 같은데 let list = new LinkedList() 말씀하시면서 인스턴스화 했다고 하셨는데 인스턴스화가 무엇인지 궁금합니다. 감사합니다.

  • 알고리즘
  • algorithm
이동근 댓글 1 좋아요 1 조회수 479

안녕하세요! 큐 관련 질문입니다.

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

선생님 안녕하세요. deleteAt 를 만들 때 마지막노드(tail) 제거 하는 부분에서 index == this.count -1 마자믹 노드인데 this.count-1 하는 이유는 무엇일까요? 비전공자로 개발에 도전하고 있는데.. 자료구조 어렵네요ㅜ

  • 알고리즘
  • algorithm
이동근 댓글 1 좋아요 -1 조회수 463

연결리스트 관련 질문

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

let currentNode = this.head; for (let i = 0; i < index - 1; i++) { currentNode = currentNode.next; } newNode.next = currentNode.next; currentNode.next = newNode; currentNode = currentNode.next 이 부분이 잘 이해가 안갑니다.

  • 알고리즘
  • algorithm
이동근 댓글 2 좋아요 1 조회수 473

제가 이해한게 맞는지 확인부탁드립니다. [동적배열 8: 16초]

미해결

코딩테스트 [ ALL IN ONE ]

Array배열의 경우 시작주소+ 4*(n-1) 즉 아무리 긴 배열이더라도 한번의 연산으로 원하는 데이터에 접근할 수 있기 때문에 배열 요소에 접근할 때의 시간복잡도는 O(1)입니다. 여기까지는 이해가 갑니다. 그런데 동적 배열 8:16초에서 Dynamic Array의 선언 및 초기화의 시간복잡도가 왜 O(n)인지 이해가 가지 않았는데요 질문1. 예를 들어 배열의 사이즈가 3인 경우 (자바로 예를 들어 보겠습니다.) int[ ] array = { 10, 20, 30 }; 이런 경우 배열의 요소가 3개이므로 주소값에 3번을 접근 해야 하고, int[ ] array = {1, 2, 3, 4, 5}; 배열의 요소가 5개 일때는 주소값에 5번을 접근 해야 하며, int[ ] array = { 1, 2, 3,... n}; 배열의 요소가 n개 일때는 주소값에 n번을 접근 해야 한다. 따라서 배열의 선언 및 초기화의 시간 복잡도는 O(n)이다. 제가 이해한 게 맞는지 답변 부탁드립니다. <질문하는 의도> "강사님께서 배열에 n개의 데이터를 저장해야 하기 때문에 배열의 선언 및 초기화의 시간 복잡도는 O(n)이다."라고 말씀하셨는데, 제가 중간이 이해가 가지 않아서요 질문2. 추가적으로 덧붙이자면 메모리의 해당 번지에 있는 값을 삭제 하기 위해서도 그 번지(주소)에 접근해야 하고, 메모리의 해당 번지에 값을 추가 하거나 할당 하기 위해서 그 번지(주소)에 접근해야 되잖아요. 그러면 메모리주소에 "접근"이란 말은 삭제, 할당, 수정, 삽입, 모든 경우에 다 통용되는 단어인거죠??

  • python
  • 알고리즘
  • algorithm
  • 코테 준비 같이 해요!
똑같이썼는데안돼 댓글 1 좋아요 2 조회수 965

hashFunctrion 메서드

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

hashFunction 메서드는 해시 테이블 자료구조에서 알고리즘이 들어가는 자료구조이군요.

  • 알고리즘
  • algorithm
개발 까마귀 댓글 1 좋아요 1 조회수 305

HashTable set 메서드

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

안녕하세요. 영상 잘봤습니다 강의에서 set 메서드를 구현하실 때 연결리스트이 insertAt을 이용하셨는데 이 때 들어가는 파라미터는 0, new HashData 즉 key값을 0 추가 될 때 마다 head를 하겠다인데 클라이언트에서 연결리스트 인덱스까지 지정해서 할 필요는 없을까요?

  • 알고리즘
  • algorithm
개발 까마귀 댓글 1 좋아요 1 조회수 342

셋의 핵심

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

안녕하세요 영상 잘봤습니다. set에 핵심인 데이터가 증복되지 않게 저장하는데 이 핵심만 지키면 꼭 해세테이블을 이용해서 할 필요가있을까요? 배열이나 연결리스트로 하면은 안될까요?

  • 알고리즘
  • algorithm
개발 까마귀 댓글 1 좋아요 1 조회수 374

연결 리스트 삽입과 삭제 질문드립니다.

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

1분 50초 가량에 배열에서 데이터를 추가하려는 경우 overhead가 많이 발생하는데 연결 리스트의 경우 중간에 데이터를 삽입하면 다음을 가리키는 노드만 바꿔주면 되기 때문에 간단한 작업이라고 나와 있습니다.(데이터의 삭제도 마찬가지) --------------------------------------------------------------------------------------- 하지만 4분 9초 가량에 배열과 연결리스트의 삽입과 삭제를 비교하실 때 배열은 위의 얘기와 동일한 말씀을 하셨는데( O(n)의 성능을 가진다. ) 연결리스트에서 "삽입하려는 노드까지 노드를 계속 타고 가야하기 때문에 O(n)의 성능을 가진다." 라고 하셨는데 이 말씀은 "중간에 데이터를 삽입하면 다음을 가리키는 노드만 바꿔주면 되기 때문에 간단한 작업" 이 말과 충돌한다고 생각합니다. --------------------------------------------------------------------------------------- "삽입하려는 노드까지 노드를 계속 타고 가야하기 때문에 O(n)의 성능을 가진다." 이 말은 데이터 참조에 해당하는 말이 아닌지 질문 드리고 싶습니다. --------------------------------------------------------------------------------------- 결국에 제 말이 틀린거라면 즉, 연결리스트도 삽입과 삭제 시 O(n)의 성능을 가진다면 배열과 비교했을 때 연결리스트의 유일한 장점은 처음에 크기를 지정해 주지 않아도 된다는 점 하나 뿐인 것인가요?

  • 알고리즘
  • algorithm
hyunyoung 댓글 1 좋아요 1 조회수 717

deque.addLast

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

addLst에서 구현할 때 insertAt으로 구현하셨는데 연결리스트에 구현한 insertLast로 구현하는게 더 직관적인거같은데 insertAt으로 한이유가 있을까요?

  • 알고리즘
  • algorithm
개발 까마귀 댓글 1 좋아요 1 조회수 340

스택과 큐의 필요성

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

스택은 FIFO 큐는 LIFO 구조인데 이 두개를 합친게 덱같네요. 이렇게되면 스택과 큐의 자료구조의 필요성이 잘 느껴지지 않습니다. 덱이 성능이 나쁘게 아니고 연결리스트 덕분에 삽입 제거가 O(1)의 성능이 나오는데 이렇게되면 굳이 스택과 큐를 써야하나싶은데 스택, 큐, 덱이 성능상의 차이점이 있을까요?

  • 알고리즘
  • algorithm
개발 까마귀 댓글 1 좋아요 1 조회수 774

인기 태그

인프런 TOP Writers

주간 인기글