게시글
질문&답변
수업 질문
안녕하세요 snoapple3 님 좋은 질문 감사합니다! 기업 코딩테스트의 환경은 코랩보다는 pycharm 에 더 가깝습니다! 실행 결과를 개별 행마다 테스트해보지는 못하고 전체 실행의 결과만을 비교할 수 있습니다. 아무래도 코랩 쓰시다가 오셔서 불편함을 느끼신 것 같습니다 ;_;앗 이 부분은 제가 잘못 설명드린 부분 같습니다! 영상 초반부일 것 같은데, 변경해두록 하겠습니다 제보주셔서 감사드리옵니다 __파이참을 이용하면 각 실행부의 디버깅이 수월해서 결정했습니다! 교재에 있는 디버깅 하는 방법 문서를 통해 한 번 디버깅 방법을 익혀보시면, 아마 코랩보다 훨씬 수월하게 코드 실행 방식을 이해하시는데 도움이 가리라 생각합니다 한 번 사용해보시길 권장드립니다!질문 주셔서 감사합니다 즐거운 주말 보내세요!
- 0
- 1
- 28
질문&답변
2-6 LinkedList 합계 자바 풀이
안녕하세요 근희님! 좋은 질문 감사합니다자바로 새롭게 코드를 작성해서 풀어보다니 너무 훌륭합니다!! 파이썬 코드와 비교해보면 개념적으로 동일한 접근법을 사용하신 것 같습니다. 다만 파이썬 코드에서는 get_single_linked_list_sum 함수에서 순회하면서 값을 계산할 때 자릿수를 고려하여 곱하기 10을 하는 방식을 사용했고, 자바 코드에서는 StringBuilder를 활용해 문자열로 만든 후 숫자로 변환하는 방식을 사용하셨습니다. 두 방식 모두 잘 작동하며 각각의 장단점이 있습니다파이썬 코드 방식 (곱하기 10 사용):장점: 숫자를 바로 계산하므로 추가 변환 없음단점: 연결 리스트가 매우 길면 자릿수 계산에 주의해야 함자바 코드 방식 (StringBuilder 사용):장점: 문자열 조작이 직관적이고 코드가 간결함단점: 문자열→숫자 변환 과정이 추가됨 다만, 자바 코드에서 한 가지 주의할 점이 있습니다.while (cur1 != null && cur2 != null) { firstNumber.append(cur1.data); secondNumber.append(cur2.data); cur1 = cur1.next; cur2 = cur2.next; } 이 부분은 두 연결 리스트의 길이가 다른 경우 처리를 못할 수 있습니다. 예를 들어, 한 리스트가 다른 리스트보다 길면 긴 리스트의 나머지 부분이 무시될 수 있습니다. 따라서 다음과 같이 수정하면 더 확장성 있는 코드로 사용될 수 있습니다.while (cur1 != null) { firstNumber.append(cur1.data); cur1 = cur1.next; } while (cur2 != null) { secondNumber.append(cur2.data); cur2 = cur2.next; }이 내용을 제외하면, StringBuilder를 활용한 접근법은 자바스러운 좋은 풀이입니다! 수업의 내용을 이해하고 자바로 새롭게 풀어보는 모습 너무 훌륭하십니다!! 코테 부술때까지 파이팅이십니다!
- 0
- 2
- 49
질문&답변
키보드 질문
ㅋㅋㅋㅋㅋ 안녕하세요 용찬님!!재밌는 질문 감사합니다제 키보드는 요 모델입니다!! (근데 좀 시끄러워서 회사에서는 좀 쓰기 그러실수도 있어용 ㅎ.ㅎ)https://inf.run/UafGh
- 0
- 2
- 74
질문&답변
이 번에 처음으로 알고리즘이라는 걸 공부해보고 있는데
안녕하세요 근희님! 좋은 질문 감사합니다1주차 연습문제를 안보고 풀 수 있는 정도면 상당히 좋은 출발점에 있으신 겁니다!!!! 알고리즘 학습 초기에 그 정도 수준이면 기본 개념을 잘 이해하고 계신 것으로 볼 수 있습니다 알고리즘 학습은 처음에는 누구에게나 어렵습니다. 지금 어렵게 느껴지는 것은 매우 자연스러운 과정이니 너무 걱정하지 마세요. 중요한 것은 꾸준한 복습과 연습입니다. 알고리즘은 반복적인 학습과 다양한 문제 해결 경험을 통해 점차 익숙해지는 분야입니다. 실제 코딩테스트의 난이도는 회사마다, 직무마다 매우 다양합니다 기본적인 자료구조와 알고리즘 개념을 활용한 문제가 출제되는 경우도 있고여러 개념을 복합적으로 적용해야 하는 더 어려운 문제가 나오기도 합니다하지만 대부분의 기업 코딩테스트는 기본기를 얼마나 잘 이해하고 있는지 확인하는 데 중점을 둡니다. 따라서 지금 학습하시는 내용들을 탄탄하게 다지시면 충분히 대비할 수 있을 겁니다! 어렵더라도 포기하지 마시고 계속 도전하세요! 알고리즘 실력은 하루아침에 향상되지 않습니다. 지금 어렵게 느껴지는 것들이 나중에는 당연하게 느껴질 날이 반드시 올 거예요. ㅎㅎㅎ 꼭 합격까지 빠이팅하시길 바라겠습니다!!!
- 0
- 2
- 129
질문&답변
스택 - 탑문제
수빈님 오랜만에 질문 탭에서 뵙는 것 같습니다벌써 겨울이 지나고 봄인데 잘 지내시죠?? 좋은 질문 주셔서 감사합니다!!강의에서 제시되었던 코드는 반복문에서 스택을 사용하도록 변경한 코드라서, 실제로 큰 입력값을 처리하기에는 효율적이지 않습니다!현재 코드의 시간복잡도는 O(n²)으로:각 탑마다 (while heights:)이전의 모든 탑을 순회하며 확인합니다 (for idx in range(len(heights) - 1, -1, -1):)백준과 같은 알고리즘 문제 사이트에서는 보다 효율적인 O(n) 알고리즘이 필요합니다. 아래는 스택을 활용한 개선된 코드입니다def top_stack(N, tops): result = [0] * N stack = [] # (인덱스, 높이) 저장 for i in range(N): # 현재 탑보다 낮은 탑은 스택에서 제거 while stack and stack[-1][1] 이 개선된 알고리즘은각 탑을 한 번씩만 처리합니다스택에는 레이저 신호를 수신할 가능성이 있는 탑의 정보만 유지합니다불필요한 비교를 피해 시간복잡도를 O(n)으로 개선합니다 해당 개선 방식에 대해서 추가적으로 교재에서 다뤄봐도 좋을 것 같습니다!추후에 알고리즘 영상을 보완하는 시점에 해당 문제 풀이 방법에 대해서도 작성해보도록 하겠습니다강의 개선 아이디어 주심에 대한 감사의 의미로 커피 기프티콘을 드리겠습니다 아래 카카오톡 오픈 링크로 연락 부탁드립니다!!https://open.kakao.com/me/ding_coding_co감사합니다
- 0
- 1
- 60
질문&답변
3-8 해쉬 관련 다른 풀이도 궁금해요.
안녕하세요 Tommy 님! 좋은 질문 감사합니다!!맞습니다! HashTable과 Set 자료구조 모두 평균적인 조회 성능은 O(1)입니다. 따라서 제시하신 코드처럼 Set을 사용하여 문제를 해결하는 접근법은 시간복잡도 측면에서 매우 효율적입니다. 두 방식 모두 전체 시간복잡도는 O(n + m)으로 동일합니다. 여기서 n은 all_array의 길이, m은 present_array의 길이입니다.set 방식의 장점은 코드가 더 간결하고 읽기 쉽습니다. 이번 문제에서는 학생의 유니크함을 보장하고 있기 때문에 더 명확하다고 할 수 있을 것 같습니다. 다만, 만약 동명이인이 나타난다면 어떻게 처리를 할지 정도 고려해봐도 좋을 것 같습니다여러가지 고민을 해보시는 습관 너무 좋습니다! 완강까지 빠이팅입니다!
- 0
- 2
- 50
질문&답변
재귀함수 관련 질문
안녕하세요 금융 ToIT님!! 좋은 질문 감사합니다말씀주신대로 재귀함수는 개념은 이해하기 쉽지만 실제 구현에서 어려움을 겪기 쉬운 것 같습니다!프로그래머스에서 재귀함수 기본기를 익힐 수 있는 문제들을 추천해 드리겠습니다. 재귀함수 입문 문제하노이의 탑 - 재귀의 고전적인 예제입니다.팩토리얼 계산 - 가장 기본적인 재귀함수 예제입니다.피보나치 수열 - 재귀의 기초를 익히기 좋은 문제입니다.중급 난이도 문제쿼드압축 후 개수 세기 - 영역을 4분할하여 재귀적으로 처리합니다.괄호 변환 - 문자열을 분할하고 재귀적으로 처리하는 문제입니다.모음 사전 - 재귀를 활용한 문자열 생성 문제입니다. 재귀함수를 구현할 때는 다음 단계를 따르시면 도움이 됩니다:재귀가 종료되는 조건을 명확히 합니다.큰 문제를 작은 문제로 분할합니다.축소된 문제에 대해 함수를 다시 호출합니다. 문제들의 결과를 결합하여 원래 문제의 답을 구합니다.각 문제를 풀 때마다 위의 단계를 명확하게 구분해보면 재귀함수에 대한 감을 잡는 데 도움이 될 것 같습니다! 재귀 호출 시 함수가 어떻게 호출되고, 반환값이 어떻게 처리되는지 직접 따라가보시는 것도 추천드립니다.학생분이 구체적으로 어떤 문제에서 어려움을 겪고 있는지 알려주시면 더 맞춤형 도움을 드릴 수 있을 것 같습니다.
- 0
- 2
- 41
질문&답변
다음 알고리즘의 경우 괜찮은 접근인지 궁금해요
안녕하세요 Tommy 님 좋은 질문해주셔서 감사합니다!!두 코드를 비교해보면원래 코드는 알파벳 발생 빈도 계산한 번만 등장한 문자들의 배열 생성원래 문자열을 다시 순회하면서 처음 발견된 중복되지 않는 문자 반환Tommy 님의 코드는알파벳 발생 빈도 계산(별도 함수로 분리)원래 문자열을 한 번만 순회하며 빈도가 1인 첫 문자 바로 반환처럼 변경이 된 것 같습니다! Tommy 님의 접근 방식이 실제로 더 효율적입니다!함수를 분리하여 코드 가독성이 향상되었습니다.중간 배열(not_repeating_character_array)을 만들지 않아 메모리 사용이 더 효율적입니다.원래 코드는 문자열을 두 번 순회하지만, 질문자분의 코드는 한 번만 추가로 순회합니다.또한 문제의 의도(첫 번째로 중복되지 않는 문자 찾기)를 정확히 구현했습니다. 아주 좋은 개선이라고 생각합니다!! 👍 👍
- 0
- 2
- 83
질문&답변
5-4. 카카오 신입 개발자 블라인드 채용 1차 코딩테스트 - 2 질문입니다.
안녕하세요 가희님! 좋은 질문 주셔서 감사합니다!! 먼저, 문제의 핵심 부분을 다시 살펴보겠습니다.매개변수로 주어지는 p는 균형잡힌 괄호 문자열입니다.알고리즘 내에서 w를 분리할 때는 '균형잡힌 괄호 문자열'인 u와 나머지 v로 분리합니다.예시로 주신 "))()(" 케이스를 봅시다:이 문자열은 '('가 2개, ')'가 3개로 균형잡힌 괄호 문자열이 아닙니다.따라서 이 문자열이 매개변수 p로 주어지는 경우는 문제의 조건에 맞지 않습니다.문제는 균형잡힌 괄호 문자열 p가 주어졌을 때, 이를 올바른 괄호 문자열로 변환하는 알고리즘을 구현하는 것입니다. 따라서 W 는 반드시 균형잡힌 괄호 문자열이라고 가정하고 풀어야 할 것 같습니다! 아마 가희님께서 구현하신 코드를 보면,코드에서 is_this_correct_parentheses 함수는 '균형잡힌 괄호 문자열'인지 확인합니다 (열린 괄호와 닫힌 괄호의 개수가 같은지).하지만 루프에서 tmp_u = W[:i]로 분리할 때, 이 부분 문자열이 균형잡힌 괄호 문자열인지 확인한 후 바로 break하면, "더 이상 분리할 수 없는" 조건을 만족시키지 못할 수 있습니다. 즉 제시된 코드는 균형잡힌 괄호 문자열을 올바르게 찾지 못하는 경우가 있어, 예시 "))()(" 같은 입력에서 오류가 발생할 수 있습니다. 그런데 이 예시는 애초에 균형잡힌 괄호 문자열이 아니라서 문제의 전제 조건을 위반합니다. 실전에서는 이런 전제조건에 따라 구현방향성이 매우 갈리는 경우가 많아서, 전제조건에 맞춰서만 구현하는 것을 권장드립니다! 알고리즘 학습 시에는 "만약 이 전제조건이 깨지는 상황에서는 어떻게 하면 문제를 해결할 수 있을까?" 라는 가정을 열어보면서 문제를 해결해보시는 것도 좋을 것 같습니다! 요 관점에서 트라이해보신거라면 짱입니당
- 0
- 1
- 95
질문&답변
강의 진행하면서 이해도 및 진행방향에 대한 질문입니다.
안녕하세요 홍구님 좋은 질문 해주셔서 감사합니다!! 프로그래밍과 알고리즘을 배우는 과정에서 많은 분들이 정말 비슷하게 힘들어 하시는 것 같습니다!! 물론 저도 엄청 처음에 힘들었습니다 ㅋㅋㅋㅋ 코드를 이해하는 것과 직접 작성할 수 있는 것은 분명 다른 과정이라고 생각합니다제 경험에 비추어 보면, 다음과 같은 접근 방식이 효과적이었습니다!개념 이해를 먼저: 모든 개념을 충분히 이해한 다음 문제를 다시 보면서 풀이 방법을 차근차근 생각해보세요.따라 작성해보기: 이해한 코드를 보면서 직접 타이핑해보는 과정이 중요합니다. 처음엔 그대로 따라 적더라도 큰 의미가 있습니다.변형해보기: 코드의 일부를 의도적으로 수정해보고 어떻게 결과가 달라지는지 관찰해보세요. 그 과정에서 내가 사고하는 것들이 맞는지 확인할 수 있습니다.비슷한 문제 풀기: 배운 개념을 적용할 수 있는 유사한 문제를 풀어보면서 사고의 흐름을 체득하는 시간이 필요합니다."이해는 가지만 직접 작성은 어렵다"는 단계는 정말 모든 프로그래머가 거치는 과정입니다! 이 단계에서 멈추지 말고 계속 강의를 들으면서 병행하여 직접 코딩하는 연습을 하시길 권장드립니다. 시간이 지나면 자연스럽게 코드 작성 능력이 향상될 거에요!!결국, 암기보다는 원리 이해와 반복 연습을 통한 체득이 중요합니다. 강의를 통해 개념을 이해하고, 그 개념을 실제로 적용해보는 과정을 반복하다 보면 어느 순간 스스로 코드를 작성할 수 있게 될거에요!!끝까지 포기하지 마시고 꾸준히 연습하시는 홍구님을 옆에서 응원하겠습니다!!이렇게 고민하는 순간부터 실력은 꾸준히 향상되실거에요!!빠이팅이십니다!!
- 0
- 2
- 134