묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-10강 문제풀이중...
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?섹션1에 10강을 수강하고있습니다1-10. 알고리즘 더 풀어보기 (2) 2. 어려움을 겪는 부분강사님께서 제공해주신 문제를 먼저 풀어보았는데아래처럼 내장함수를 이용해서 풀어도 되나? 궁금합니다. 최대한 저런 함수 사용하지 않고 강사님께서 제공해주시는 풀이법으로 알고리즘을 공부하는게 맞는거같은데.. 저처럼 풀면 안되는건가 싶어서요...ㅠㅠ 알고리즘적인 생각이 아닌가도 싶고 ㅠㅠ 고민입니다!일단 char로 순서대로 돌꺼고 어차피 갯수가 1이면 바로 char 을 return해 주면 되지 않을까? 해서 아래처럼 해보았습니다...def find_not_repeating_first_character(string): # 이 부분을 채워보세요! for char in string: if string.count(char) == 1: return char return "_" 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
1717번 최적화
union find 최적화 과정 중 union 최적화에서rank[a]와 rank[b]가 같을때는 아래로 가는 트리? 높이의 rank를 1 증가해줬는데 왜 다를때는 rank를 증가 안해주나요?증가해주는게 맞지않나? 싶어서 여쭤봅니다.
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
재귀 관련 문제 관찰할 때 질문
저는 현재 재귀, 백트래킹 파트가 암산으로 하기가 힘들어, 직접 스택 프레임을 그려보면서 계산해본 후 이 값이 정말 이렇게 들어가는 게 맞는지 체크를 해보고 있습니다. 다만 실제로 문제를 풀 때 이렇게 하나하나 재귀깊이를 따라가면 시간이 많이 소요될 거 같은데 이러한 부분과 관련해서 팁이 있을까요? 실제로 풀 때는 permutation(level + 1)을 재귀로 쓰면 대충 "[1, 2, 3], [1, 2, 4]... 순으로 나오겠지"와 같은 경험에 기반한 예측을 바탕으로 바로 사용하시는 건지 사고 과정이 궁금합니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
04_MultiIndex 예제에서 질문이 있습니다
안녕하세요 강사님!SearchByIndexAgeRange 함수 안에 있는 코드를 다음과 같이 바꿔서 사용해도 될 것 같아서 변경해보았습니다. void** SearchByIndexAgeRange(int min, int max, unsigned int* pCount) { // unsigned int cntTotal = 0; // USERDATA** aList = (USERDATA**)MakeIndexAge(&cntTotal); unsigned int cntTotal = GetListCount(); USERDATA** aList = g_idxListAge; // 중략... }혹시 이 방식 대신 MakeIndexAge를 사용하신 이유가 있으실까요?
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-5 알고리즘과 친해지기 (2) - 최빈값(알파벳) 구하기
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?: 1-5 알고리즘과 친해지기 (2) 어떤 알고리즘을 학습하고 계신가요?: 최빈값 찾기(알파벳)여기까지 이해하신 내용은 무엇인가요?: 'a' -> ord('a') -> 97 -> chr(97) -> 'a' 이고, 'A' -> ord('A') -> 65 -> chr(65) -> 'A' 이다. 아스키 코드를 활용하고, 가장 기본이 되는 원리는 이렇다.0이 26개인 배열(a_o_a)을 만들고, 주어진 문자열(string)을 반복문으로 순회한다. (for char in string: ... )ord('a') - ord('a') = 0 이고, ord('b') - ord('a') = 1 이고, ... 이 원리에 따라 ord(char) - ord('a') 를 하면, char가 몇 번째 순서의 알파벳인지 구할 수 있다. 이를 0이 26개인 배열(a_o_a)의 인덱스(i)로 활용한다.string을 반복문으로 순회하면서, (만약 숫자나 띄어쓰기가 아니고 알파벳이라면) a_o_a[i] += 1 을 한다. a_o_a 에 각 알파벳의 빈도수가 저장이 된다.a_o_a를 반복문으로 순회하면서, max_alphabet_index를 구한다.chr(max_alphabet_index + ord('a')) 을 하면 최종적으로 최다 빈도수인 알파벳이 구해진다. 2. 어려움을 겪는 부분 저는 string.count(char)를 이용하여 풀었습니다. 그런데 이 아스키 코드 원리를 활용한 알고리즘이 많이 출제되나요? 코테 출제하시는 분들께서 아스키 코드를 활용한 로직을 더 선호하시는지 궁금합니다!
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1주차 숙제 두번째 문제 풀이에서..
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 1-11 2. 어려움을 겪는 부분첫 시도에서 count_to_all_zero 와 count_to_all_one이 모두 1이 나오는 이유가 첫번째 문자에 대해서 비교를 안하고 있다고 나와있는데,첫번째 문자가 아니라 맨 마지막 문자를 비교 안하고 있는 것이 아닌가 궁금합니다! 첫 시작에서는 0번째 인덱스와 1번째 인덱스를 비교하지만마지막 len(string) - 1번째 인덱스와 len(string)를 비교할 때는 마지막 문자에 대한 카운팅이 이루어지지 않는게 아닌가 하는데.. 제가 잘못 이해하고 있는걸까요..? ㅠㅠ
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-10 문제 이런 접근은 어떤가요?
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 1-10 2. 어려움을 겪는 부분재취준을 준비하면서 여러 기업의 코딩테스트를 봤었는데요.항상 시간 예외성 검사에 걸려서 코딩테스트를 탈락합니다.그래서 이 문제를 보면서도 시간을 최대한 줄이고자 노력했습니다. 3. 시도해보신 내용input = "abadabac" def find_not_repeating_first_character(string): while True: found_flag = False if len(string) > 1: target_char = string[0] for compare_char_index in range(1,len(string)): if target_char == string[compare_char_index]: found_flag = True break if found_flag: string = string.replace(target_char, "") else: return target_char else: return "_" result = find_not_repeating_first_character print("정답 = d 현재 풀이 값 =", result("abadabac")) print("정답 = c 현재 풀이 값 =", result("aabbcddd")) print("정답 =_ 현재 풀이 값 =", result("aaaaaaaa")) 제가 봐도 가독성이 안좋긴한데.. 저는 이 문제를 풀면서 가장 먼저 생각한 것이 '이미 한번 훑은 알파벳에 대해서는 순회를 제외한다' 였거든요.그런데 글을 쓰면서 다시 확인해보니 string을 replace할 때 오히려 더 시간이 늘어날 것 같기도 하구요.. ㅠㅠ for문의 대상이 되는 객체를 for문 안에서 변경할 수 없기에 부득이하게 found_flag라는 변수를 선언해서 for문 밖에서 판단 후 replace 하는 식으로 코드를 작성했습니다. 궁금한 점이, 딩코딩코님은 이 접근법에 대해서 어떻게 생각하시나요? 저는 정말 간단할 수 있는 문제를 20분 정도의 시간을 고민하면서 풀었는데, 이런 부분 때문에 실제 코딩테스트를 응시할 때도 시간이 부족했습니다.. ㅠㅠ 코딩테스트를 보면 1 <= N <= 1,000,000,000이런 식으로 제한을 두다 보니.. '길이 1억의 string이 주어졌을 때 전부 순회하면 시간이 너무 길어지지 않나..?' 하는 생각이 항상 발목을 잡는 것 같습니다.. 이런 문제를 접근할 때 어떤 식으로 접근해야 할지 조언 부탁드립니다..항상 좋은 강의 감사드립니다!! (_ _)
-
미해결김영한의 실전 자바 - 중급 2편
7번 장바구니 문제의 minus() 메서드 로직 관련
[질문 내용]문제 7 - 장바구니 문제에서, minus 메서드를 보면 찾으려는 product가 존재하지 않는 경우에도 cartMap.remove()를 호출하도록 되어 있습니다. 존재하지 않는 것을 지우고자 하는 게 불필요하게 메서드를 호출하는 게 아닌가 싶은데, 예제를 쉽게 만들기 위한 선택인가요, 아니면 실무에서 저렇게 결과를 찾을 수 없어도 지우도록 하는 코드를 작성해도 문제가 없는 건가요?
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
파이썬 Class Method 질문
안녕하세요 ! 섹션 8 듣는 중에 질문 드립니다.제가 Class의 개념이 조금 부족한 것 같아서 이해를 잘 못했을 수 있습니다.Class Method는 instance의 상태를 변화시킨다고 말씀주셨는데,instance가 여러 개인 경우, 특정 instance만 변경하고 싶을 때는 해당 instance를 지정해주면 되는 걸까요 ?Class Method는 주로 어떨 때 사용하나요 ?Class 내에서 이미 선언된 instance 값을 변경시킬 일이 어떤게 있나 궁금합니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 공유 부탁드립니다.
안녕하세요 현재 강의를 듣고 있는데 노션 워크스페이스 공유가 안되어있어서 해당 메일로 공유 부탁드립니다.dohyun8032@gmail.com
-
미해결코딩테스트 합격자되기-알고리즘 개념
의사코드 작성시에 깊이에 대한 질문입니다.
의사코드 작성시에 깊이가 3단계를 넘어가지 않아야 하고, 넘어간다면 그 부분을 함수로 만들라고 하셨습니다. 함수를 만든다는 의미는 의사코드에서 함수를 만들라는 이야기 인가요?? 아니면 의사코드는 깊이를 전부 표현하되, 구현에서 함수로 독립을 시켜야 한다는 의미 인가요??
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 상한 설정을 위해 생성자를 활용하는 것이 extends보다 못한 점이 무엇인가요?
[질문 내용]제네릭의 상한 설정을 소개하시기 전에 어떻게 특정 타입만을 받도록 할지 혼자 고민을 해 보았는데, 클래스 생성 시 생성자를 통해 받을 타입을 제한하면 어떨까 생각했습니다. public class Box<T> { private T animal; public Box(Animal animal) { this.animal = (T) animal; } } 결과적으로 문제를 해결하기는 했는데, 이 방법에도 여전히 문제가 있기 때문에 extends를 이용하는 거겠죠? 상기한 방법이 extends를 이용하는 방법보다 못한 점이 무엇인지 궁금합니다.
-
미해결김영한의 실전 자바 - 중급 2편
Cat에 toString 을 오버라이딩 하면...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]위와 같이 Cat 클래스에 toString 메서드를 오버라이드 했을때 findAnimal2 의 결과가 Cat()이 나오는게 왜 그런지 모르겠습니다.. 타입 인자가 Animal이고, Cat은 Animal을 상속받은 자식 클래스기 때문에 Cat의 toString 이 나와야 하는거 아닌가요..? 어디서 놓친건지 잘 모르겠습니다.
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
코딩테스트 디버깅
안녕하십니까 좋은 강의 잘보고있습니다!디버깅에 관한 중요성을 알려주셨는데 요새 코딩테스트는 IDE를 허용하지않는 경우가 꽤 있는것으로 알고있습니다.이러한 경우에는 어떻게 처리하시나요?
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-9 알고리즘 문제 다른 코드
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?1-9 알고리즘 더 풀어보기 (1) 2. 어려움을 겪는 부분문제의 조건이 모든 연산은 왼쪽에서 순서대로 이루어진다. 라고 되어있어, 연산을 해야하는 순간에 가장 최대가 될 수 있는 연산만 골라서 계산한다 라고 떠올려보았습니다. 그렇다면 해당 문제를 greedy로 생각해봐도 괜찮을까요? 아직 진도 초반이지만, 평소 코테 문제를 볼 때 어느 부분에 힌트를 잡고 어떤 알고리즘으로 풀어야하는지에 대해 감이 없는 상태라서 이런 문제들(연산이 순서대로 된다던지, 거스름돈 문제처럼 단위가 결정된다던지)은 greedy로 보면 되는지 여쭙고싶습니다.아래는 풀이한 코드입니다.def find_max_plus_or_multiply(array): answer = array[0] for n in range(1,len(array)): if answer + array[n] > answer * array[n]: answer += array[n] else: answer *= array[n] return answer result = find_max_plus_or_multiply print("정답 = 728 현재 풀이 값 =", result([0,3,5,6,1,2,4])) print("정답 = 8820 현재 풀이 값 =", result([3,2,1,5,9,7,4])) print("정답 = 270 현재 풀이 값 =", result([1,1,1,3,3,2,5]))
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
시간복잡도 설명부분에서 질문이 있습니다
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?1챕터 7강 (공간 복잡도 판단하기) 2. 어려움을 겪는 부분1-7 강에서 시간 복잡도 설명을 해주시면서아래 코드들을 직접 array 길이의 값인 26을 대입하여 비교해주셨는데요,사실상 첫 번째 코드는 이중 for문이므로 O(N^2)이고, 두 번째 코드는 for문을 각각 1개씩 썼기때문에 O(N)라 시간복잡도면에서 큰 차이가 나지않나해서요강의에서는 직접 숫자를 대입한 후에 첫 번째 코드와 두 번째코드는 N^2에 비해 효율에 있어 차이가 없다고 말씀하셔서 어디 부분에 제가 혼동이 오는지 궁금하여 질문드립니다! for alphabet in alphabet_array: # alphabet_array 의 길이(26)만큼 아래 연산이 실행 occurrence = 0 # 대입 연산 1번 실행 for char in string: # string 의 길이만큼 아래 연산이 실행 if char == alphabet: # 비교 연산 1번 실행 occurrence += 1 # 대입 연산 1번 실행 if occurrence > max_occurrence: # 비교 연산 1번 실행 max_alphabet = alphabet # 대입 연산 1번 실행 max_occurrence = number # 대입 연산 1번 실행 for char in string: # string 의 길이만큼 아래 연산이 실행 if not char.isalpha(): # 비교 연산 1번 실행 continue arr_index = ord(char) - ord('a') # 대입 연산 1번 실행 alphabet_occurrence_list[arr_index] += 1 # 대입 연산 1번 실행 max_occurrence = 0 # 대입 연산 1번 실행 max_alphabet_index = 0 # 대입 연산 1번 실행 for index in range(len(alphabet_occurrence_list)): # alphabet_array 의 길이(26)만큼 아래 연산이 실행 alphabet_occurrence = alphabet_occurrence_list[index] # 대입 연산 1번 실행 if alphabet_occurrence > max_occurrence: # 비교 연산 1번 실행 max_occurrence = alphabet_occurrence # 대입 연산 1번 실행 max_alphabet_index = index # 대입 연산 1번 실행
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
안녕하세요, 혹시 다른문제도 여쭤볼 수 있을까요?
import java.util.*; public class Main { static int N; static ArrayList<Integer>[] graph; static ArrayList<Integer>[] graphReverse; static ArrayList<Integer> orderNode = new ArrayList<>(); static ArrayList<Integer> reverseOrderNode = new ArrayList<>(); static boolean[] visited; public static void dfs(int idx) { visited[idx] = true; orderNode.add(idx); for(int next : graph[idx]) { if(!visited[next]) { dfs(next); } } } public static void dfsReverse(int idx) { visited[idx] = true; reverseOrderNode.add(idx); for(int next : graphReverse[idx]) { if(!visited[next]) { dfsReverse(next); } } } public static void main (String[] args) { Scanner input = new Scanner(System.in); boolean isReverseOrder = true; boolean isOrder = true; N = input.nextInt(); graph = new ArrayList[N+1]; graphReverse = new ArrayList[N+1]; visited = new boolean[N+1]; for(int i = 1; i <= N; i++) { graph[i] = new ArrayList<>(); graphReverse[i] = new ArrayList<>(); } for(int i = 0; i < N-1; i++) { int x = input.nextInt(); int y = input.nextInt(); graph[x].add(y); graph[y].add(x); graphReverse[x].add(y); graphReverse[y].add(x); } input.nextLine(); String[] orderStr = input.nextLine().split(" "); for(int i = 1; i <= N; i++) { Collections.sort(graphReverse[i], Collections.reverseOrder()); } for(int i = 1; i <= N; i++) { if(!visited[i]) { dfs(i); } } visited = new boolean[N+1]; for(int i = 1; i <= N; i++) { if(!visited[i]) { dfsReverse(i); } } for(int i = 1; i <= orderStr.length; i++) { // System.out.println(orderStr[i-1]); if(reverseOrderNode.get(i-1) != Integer.parseInt(orderStr[i-1])) { isReverseOrder = false; } if(orderNode.get(i-1) != Integer.parseInt(orderStr[i-1])) { isOrder = false; } } if(isOrder || isReverseOrder) { System.out.println(1); } else { System.out.println(0); } } }안녕하세요 강사님,,덕분에 비전공자인 제가 dfs 26개의 문제를 풀고 골드에 진입했습니다.정말 너무나도 감사합니다.하지만 골드에서 막히는게 많은데 이번 문제는 도저히 검색하고,반례를 다 찾아보고 해봐도 해결이 되지않아 답답한 마음에 여기에 글을 적습니다..문제는 백준 https://www.acmicpc.net/problem/16964 DFS 스페셜 저지입니다.제가 푼 방법은 2개의 그래프를 만든 후,1개는 sort, 다른 한개는 reverseOrder을 하여,정점 방문 순서를 2개 구한 후,마지막에 제시되는 4개의 숫자와 비교하여 출력하는 방식으로 코드를 작성하였습니다.하지만 제가 찾아본 모든 반례와 백준에서 제공되는 예제들은 통과되는데,6%에서 틀렸다고 나옵니다.다른문제로 곤란하게 해드렸다면, 바로 글 삭제하겠습니다.감사합니다.
-
미해결Do it! 알고리즘 코딩테스트 with C++
LCA 빠르게 찾기 - 트리의 높이에 따른 k값 질문
이번 강의 3회차로 잘 보고 있습니다.앞선 강좌 LCA 빠르게 찾기에서는 트리의 깊이는2^K < (트리의 최대 높이)를 만족하는 K의 최대값이라고 하셨는데실제 코딩 하실때는 아래 코드 처럼 작성하셨는데 최악인 편향 트리일때 과정하고 넉넉하게 K값을 구하는건 이해했습니다.아래 코드에서는 N이 2^K > N 을 만족하는 최소 K값을 구하식으로 구하셨더라구요 이렇게 구해도 답은 나오는데 왜 이런지 몰라서 그런데 보충 설명 가능할까요?// N의 트리가 편향 트리라고 간주 // 최악일 경우 KMax를 구한다. int temp = 1; KMax = 0; while (temp <= N) { temp <<= 1; KMax++; } // 2^k < N // KMax - 1 하는게 맞지 않나?
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
4:58 이중for문 질문있습니다.
"정렬이 된 원소의 이전 원소보다 하나 이전의 원소까지 순회해야합니다" 라는 말이 잘 이해가 안가서 그러는데 [3, 2, 1, 4] 기준으로 4가 정렬이 된 원소이고, 배열의 나머지 원소가 모두정렬을 하기 위해선 두번째 원소인 2까지는 순회해야지 세번째 원소의 1과 비교해서 정렬해준다는 말로 이해하면 될까요??정렬된 원소의 -2 번째(인덱스 0부터 -2번쨰원소)까지 순회해야하고, -2번째까지로 범위를 잡는 이유는 -1번째는 비교대상이기때문에 비교후에 정렬이 되기때문이 맞을까요???
-
미해결Go Hard to C (feat. Algorithm)
교재 다운
수업자료 교재 다운이 안됩니다..