묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Do it! 알고리즘 코딩테스트 with Python
병합정렬이 홀수개의 숫자에 적용될 경우?
안녕하세요.병합정렬이 split and merge 방식을 사용하고 있는데 만약 홀수개에 적용되는 경우는 어떻게 작동하는지 알고리즘에 변화가 필요한지 궁금합니다.
-
해결됨비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
스택, 큐 연결리스트로 구현 과제 완료입니다!
Stack// 숙제: Stack을 LinkedList로 구현하기(단, 시간복잡도는 O(1)) class Stack { tail = null; length = 0; // 가장 마지막에 노드 추가 push(value) { // 새로운 tail이 될 node 생성 const node = new Node(value); // 바꿔치기를 위해 현재 tail은 curr 변수에 저장 const curr = this.tail; // 새로운 tail을 추가하기 this.tail = node; this.tail.prev = curr; // stack의 길이 추가 this.length++; // 길이 리턴 return this.length; } // 가장 마지막 노드 제거 pop() { if (!this.tail) { // tail이 없는 경우 pop할 값이 없기 때문에 아무 동작도 하지 않음 } else { // pop될 node의 value를 변수에 저장 > 리턴 예정 const value = this.tail?.value; // 현 tail의 prev 값을 변수에 할당 > 새 tail이 될 예정 const prev = this.tail.prev; // 바꿔치기 this.tail = prev; // stack의 길이 줄이기 this.length--; // pop된 기존 tail의 value 리턴 return value; } } // Stack의 가장 마지막 원소 조회 top() { return this.tail?.value; } } class Node { prev = null; constructor(value) { this.value = value; } } const stack = new Stack(); console.log(stack); console.log(stack.push(3)); // 1 console.log(stack.push(1)); // 2 console.log(stack.push(5)); // 3 console.log(stack.push(2)); //4 console.log(stack.push(4)); //5 console.log(stack.pop()); // 4 > pop된 가장 마지막 값 리턴 console.log(stack.top()); // 2 console.log(stack.pop()); // 2 > pop된 가장 마지막 값 리턴 console.log(stack.pop()); // 5 > pop된 가장 마지막 값 리턴 console.log(stack.pop()); // 1 > pop된 가장 마지막 값 리턴 console.log(stack.pop()); // 3 > pop된 가장 마지막 값 리턴 console.log(stack.pop()); // undefined console.log(stack.top()); // undefined console.log("stack"); Queue// 숙제: Queue를 LinkedList로 구현하기(단, 시간복잡도는 O(1)) class Queue { head = null; tail = null; length = 0; // 가장 마지막에 노드 추가 enqueue(value) { const node = new Node(value); if (!this.head) { this.head = node; } else { let currHead = this.head; while (currHead.next) { currHead = currHead.next; } currHead.next = node; } const currTail = this.tail; this.tail = node; this.tail.prev = currTail; this.length++; return this.length; } // 가장 맨 앞 노드 제거 dequeue() { // head는 다음 값으로 변경 const value = this.head.value; this.head = this.head.next; // tail에 연결된 가장 맨 앞 값 삭제 => 가장 맨 앞에서 두번째의 prev를 null로 만든다 let currTail = this.tail; let prevTail; while (currTail?.prev) { prevTail = currTail; currTail = currTail.prev; } if (prevTail?.prev) { prevTail.prev = null; } else { this.tail = null; } this.length--; return value; } // Queue에서 가장 앞 쪽에 있는 값 조회 peek() { return this.head.value; } } class Node { prev = null; next = null; constructor(value) { this.value = value; } } const queue = new Queue(); console.log(queue.enqueue(1)); // 1 console.log(queue.enqueue(3)); // 2 console.log(queue.enqueue(5)); // 3 console.log(queue.enqueue(2)); // 4 console.log(queue.enqueue(4)); // 5 console.log(queue.peek()); // 1 console.log("dequeue"); console.log(queue.dequeue()); // 1 console.log(queue.dequeue()); // 3 console.log(queue.dequeue()); // 5 console.log(queue.dequeue()); // 2 console.log(queue.dequeue()); // 4 console.log("queue");
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
1090번 문제 질문
문제에 대한 정리가 필요해 질문 남깁니다.결국 문제는 1명, 2명, 3명 이렇게 차례대로 모였을 때1명 모이면 이동거리 최소 이동 거리 합 : n12명 모이면 이동거리 최소 이동 거리 합 : n2n명 모이면 이동거리 최소 이동 거리 합 : nn이런 최소값을 원하는 문제인거죠?그래서 1번 아이디어로 구현 했을 경우에는모든 좌표에 대해서 1명 모일 때 , 2명 모일 때 반복하면서모든 경우의 수를 찾아가는 가는 방법이고2번 아이디어의 경우는 모든 좌표를 볼 필요 없이 각각의 집 좌표만 보면 된다라는 생각을 해서각각의 집 좌표로 비교해서 경우의 수를 찾는 방법이고3번 아이디어는 각각의 집 좌표들을 모두 비교할 필요 없이 정렬 후 인원의 수 만큼 돌면서 작은 값이면 바꿔준다 방법이고이런 느낌으로 접근을 한게 맞는 걸까요?
-
미해결JavaScript 알고리즘 베스트 10
4번 꿈의설계 정렬 시 동일값에 대한 제약 질문
var tc2 = ['10 a. 10 a. 10 a. 20 b. 30 c.', 'c -- 100. c -- 100. c -- 100.'];테스트케이스 2번의 경우,훈련수치 = {'a':30, 'b':20, 'c':30} 이고,고민수치 = {'a':0, 'b':0, 'c':300} 입니다.바뀐 미래에서 "가장 많이 훈련한 수치"에 100을 더할 때, a와 c의 훈련수치가 같은데 이 경우 a가 아닌 c에 100을 더하는 제한사항이 보이지 않아 이해가 어려워 질문 드립니다
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
2번 구현 방법 질문 있습니다.
안녕하세요. 12:40초 경에 찾는 숫자가 배열에 있는지 확인하는 함수를 2번 방법으로 구현할 때찾는 숫자 : 1, 배열 : arr = [2, 3, 4, 5]이런식으로 배열에 찾는 숫자보다 큰 값들만 있으면cur이 -1이니까 arr[cur] == num에서 out of index 에러가 발생할 것 같은데 일반적인 이분탐색을 매개변수 탐색 방법으로 구현하려고 하면 cur = -1인 부분에 대해서는 따로 예외처리를 해주면 될까요?아니면 좀 더 깔끔한 구현 방법이 있을까요?
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
수업 질문
안녕하세요! 기업 코딩테스트의 환경이 pycharm이랑 같은지 궁금합니다. 구글 코랩환경은 하나씩 행마다 빠르게 코드를 확인해보면서 볼 수 있는데 pycharm은 한꺼번에 돌려야 하고 함수 안에 print를 넣어서 간접적으로 확인해야하니 불편해 여쭤봅니다..!ctrl + R을 누르면 pycharm에서 실행이 된다고 하는데 저는 pycharm에서 실행 버튼의 단축키가 ctrl +f5로 뜹니다,,! 단축키로 쓰기에는 너무불편한데, ctrl+R로 단축키를 바꾸신건지 저는 해당 단축키로는 실행이 되지 않아 여쭤봅니다! 코랩이 아닌 pycharm으로 수업을 진행하신 특별한 이유가 있으신지도 궁금합니다!! 감사합니다.
-
미해결김영한의 실전 자바 - 중급 2편
문제 6번 관련해서 질문드립니다
============[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.public class MemberRepository { private Map<String, Member> memberMap = new HashMap<>(); public void save(Member member) { memberMap.put(member.getId(), member); } 이 부분에서 Member인 이유가 무엇인가요?? String으로 타입설정하고 memberMap.put(member.getId(), member.getName());으로 해야하는거 아닌지 질문드립니다
-
해결됨김영한의 실전 자바 - 중급 2편
HashSet과 HashMap의 관계는 좀 부자연스럽네요
Set에서 Map으로 자연스럽게 빌드업되는 과정에서Set + value = Map이 되는 객체지향의 묘미를 다시 한번 느껴보나 기대했는데표준 라이브러리의 실제 구현은 반대로 Map - value = Set 이었네요 ㅠㅠjava.time 패키지의 딱딱 맞아떨어지는 조립방식에서 느껴졌던 희열은 어디갔을까요자바의 내장 자료구조가 저렇게 부자연스럽게 되어있는 특별한 이유라도 있을까요?구조적인 아름다움을 포기해서라도 얻는 성능적인 이점이 있는건가? 싶은데요 정확한 사정은 당사자들만 아는거겠지만 혹시나 선배님들은 아시는게 있을까 여쭈어봅니다..ㅠㅠ
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
브루트 포스 풀이
안녕하세요 강사님 강의 잘 듣고 있습니다. 강의 듣기 전에 먼저 문제를 풀어보고 있는데항상 브루트 포스 -> 그리디 -> DP 순으로 접근을 하셔서저도 동일한 과정으로 문제 풀이를 생각하고 있습니다. 브루트 포스 풀이를 떠올리기는 하는데 혼자 구현을 해보려고 하니 쉽지가 않더라고요.혼자 코드를 짜보긴 하는데 제출을 해도 애초에 시간 초과라 올바른 코드인지 확인할 수 없고, 브루트 포스로 시간초과나는 문제는 구글에서도 코드를 찾을 수가 없어서 제가 혼자 짠 코드가 제대로 짠 건지 확인하기가 힘들더라고요. 혹시 추후에 브루트 포스 코드도 같이 제공해주실 수 있는지 여쭤보고 싶습니다..
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 하한 바운드(super)의 활용 사례
안녕하세요. 제네릭 하한 바운드(super) 관련해서 질문 드립니다.상한 바운드(extends) 같은 경우에는 현재 실무에서도 유용하게 사용하고 있는데요.다만 하한 바운드는 실무에서 한번도 사용해본 적이 없습니다.하한 바운드는 결국 Object까지 거슬러 올라갈 수 있기 때문에 이점이 없다고 생각하고, 보통은 상한 바운드로 해결이 되었기 때문인데요.혹시 하한 바운드에 대한 활용 사례를 간단히 설명해주실 수 있으실까 해서 질문 드립니다!
-
해결됨김영한의 실전 자바 - 중급 2편
주소값에 실제로 접근하는데 걸리는 시간??
강의 주제와 직접적인 연관은 없는거지만.. 실제 주소값으로 접근하는데 걸리는 시간은 고려하지 않아도 되는가? 입니다 아무리 배열이 인덱스의 실제 주소값을 한번에 계산해서 찾는 구조라고는 해도 결국 그 주소까지 이동하는건 시간이 걸릴거같은데요예를들어 그게 10억 번째 인덱스라면 거기까지 순간이동 할수는 없잖아요?? 그래서 인덱스 번호에 비례해서 시간이 더 걸리긴 할거같은데..이건 너무 인간의 관점에서 생각하는거고 실제로 컴퓨터는 다르게 동작하는 걸까요?? 제가 생각해도 너무 무식한 질문이긴한데 의문을 해소하고자 질문 드립니다 ㅠㅠ ============================ 수강을 더 진행하다보니 실제 성능 설명 파트에서 메모리 접근에 대한 얘기를 해주셔서 의문이 자연스럽게 해결됐습니다 !
-
해결됨카카오 코테 6주 합격! 실전 파이썬 코딩테스트
오류
밑이 10인 log10(2)는 약 23정도 되는데 뭔가 잘못된것같습니다.
-
해결됨카카오 코테 6주 합격! 실전 파이썬 코딩테스트
재귀
안녕하세요 수강자입니다.현재 2진수로 변환할때의 재귀함수 호출부분을 듣고있습니다. 1.종료조건, 2.재귀조건 3.데이터통합 으로 심플하게 나눠서 생각하는 방법 알려주셔서 감사합니다. 하지만 재귀함수를 할때, 스택의 개념을 설명해주지 않으셔서 뭔가 2% 개념이 부족한 느낌을 받았습니다. 완전 초보자 입장에서, 코드를 한줄한줄씩 공책에 써가며 결과값이 어떻게 나오는지 확인하는 과정중에, 설명해주신 개념과 풀이법이 직관적이며 머리에 쏙쏙박히기는하는데 왜 그렇지 하는 생각이 들어서요.
-
미해결김영한의 실전 자바 - 중급 2편
배열의 가장 앞쪽에 요소를 추가할때 의문점
배열의 가장 앞쪽에 요소를 추가할때, 기존의 요소를 전부 한 칸씩 오른쪽으로 옮기고 나서 확보된 빈 공간에 추가해야한다는건 이해했습니다! 그런데 곰곰히 생각해봤는데 그냥 배열자체의 시작 주소값을 한칸 앞으로 당기고 거기다가 새로운 요소를 추가하면 빅오 표기법상 O(1)? O(2)? 가 되는거 아닌가요? 예를들면 int[]의 기존 주소값이 x100이었다면 x96으로 옮기고 새로운 요소를 거기다 추가해주는거죠 주소값 자체를 명시적으로 할당하는 문법이 있는지 없는지는 모르겠지만 어쨋든 내부적으로는 그렇게 작동하도록 언어를 구현할수도 있는거아닌가요?? 그런데 당연히 이렇게는 안되니까 안하는것일텐데, 몇시간동안 생각해봐도 안되는 이유가 안떠올라서 질문드립니다 ㅠㅠ
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
다익스트라 음수 간선
다익스트라는 음수 간선이 존재하는 경우 사용할 수 없다 라고 하셨는데 다익스트라 개념 강의에 나온 예시 코드의 경우에는 음수 간선이 존재해도 사용할 수 있는거 아닌가요? 이미 방문한 노드(최단경로를 확정한 경우)를 다시 방문하지 않는다면 음수 간선이 존재하면 최단 경로를 구할 수 없을것 같은데 강의에 나온 예시 코드는 방문을 했더라도(최단 경로를 확정 했더라도) 다시 heap에서 꺼내어 비교하는 과정이 있으므로 음수 간선이 존재해도 가능할 것 같아 질문드립니다.
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
유니온파인드
유니온 파인드 문제에서 최적화 후 정답이 나오지 않고 오류가 나옵니다. 유니온 함수만 최적화 했습니다.
-
미해결김영한의 실전 자바 - 중급 2편
강의 중 이중연결리스트
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 이중연결리스트는 안다루나요?
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
데이터 삽입, 삭제 함수 오류 범위 설정
insertAt 부분에서 오류 범위를 작성할 떄는 index > this.count라고 하신 반면에, deleteAt 부분에서는 index >= this.count라고 하신 부분이 이해가 되지 않습니다! 조금 더 부연 설명을 받을 수 있을까요?
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
키보드 질문
안녕하세요! 수업 내용 관련해서 질문은 아니고 혹시 영상에서 쓰시는 키보드 어떤 건지 알려주실 수 있나요??(소리가 너무 찰져서 궁금합니다 ㅎㅎ) 감사합니다.
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
2-6 LinkedList 합계 자바 풀이
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 2-6어떤 알고리즘을 학습하고 계신가요? LinkedList여기까지 이해하신 내용은 무엇인가요? 어떻게 로직이 흘러가는지 이해가 된 상태 입니다. 2. 어려움을 겪는 부분어느 부분에서 막히셨나요? 어려운 부분은 아니고 뭔가 제 풀이에 대해서 공유 해드리고 싶습니다!코드의 어떤 로직이 이해가 안 되시나요? 이해가 안되진 않는 것 같습니다!어떤 개념이 헷갈리시나요? 없습니다! 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요? 우선 값들을 StringBuilder 로 만들어서 각각 Int로 파싱한다음 더해주는 과정을 해보았습니다.에러가 발생했다면 어떤 에러인가요? 없습니다!현재 작성하신 코드를 공유해주세요 package algorithm_practice.second_week; public class GetLinkedLiistSum_01 { // Node 클래스 정의 static class Node { int data; Node next; Node(int data) { this.data = data; this.next = null; } } // LinkedList 클래스 정의 static class LinkedList { Node head; public LinkedList(int value) { this.head = new Node(value); } public void append(int value) { Node cur = head; while (cur.next != null) { cur = cur.next; } cur.next = new Node(value); } } // 두 연결 리스트의 합을 계산하는 메서드 public static int getLinkedListSum(LinkedList list1, LinkedList list2) { StringBuilder firstNumber = new StringBuilder(); StringBuilder secondNumber = new StringBuilder(); Node cur1 = list1.head; Node cur2 = list2.head; while (cur1 != null && cur2 != null) { firstNumber.append(cur1.data); secondNumber.append(cur2.data); cur1 = cur1.next; cur2 = cur2.next; } int result = Integer.parseInt(firstNumber.toString()) + Integer.parseInt(secondNumber.toString()); return result; } // 메인 실행 테스트 public static void main(String[] args) { LinkedList linkedList1 = new LinkedList(6); linkedList1.append(7); linkedList1.append(8); LinkedList linkedList2 = new LinkedList(3); linkedList2.append(5); linkedList2.append(4); int result = getLinkedListSum(linkedList1, linkedList2); System.out.println("두 연결 리스트의 합: " + result); // 예시: 1032 } } 파이썬 코드를 자바로 변환해서 풀어봤는데 이렇게 접근해도 좋은 풀이 일까요~? 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊