묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결코딩테스트 합격자되기-알고리즘 개념
의사코드 작성시에 깊이에 대한 질문입니다.
의사코드 작성시에 깊이가 3단계를 넘어가지 않아야 하고, 넘어간다면 그 부분을 함수로 만들라고 하셨습니다. 함수를 만든다는 의미는 의사코드에서 함수를 만들라는 이야기 인가요?? 아니면 의사코드는 깊이를 전부 표현하되, 구현에서 함수로 독립을 시켜야 한다는 의미 인가요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-k 맞왜틀 질문있습니다.
안녕하세요.아쉽게도 강의처럼 2차원 배열에 모아둔 후, 한칸씩 당기는것을 생각을 못해 노가다로 풀어버렸습니다.다만 알고리즘 자체는 맞다고 생각하고, 예제도 다 맞는데 16%에서 틀려버리네요.어디가 틀렸는지 궁금합니다.http://boj.kr/76b5753735c448b7a9558225494e778e감사합니다.
-
미해결김영한의 실전 자바 - 중급 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번 실행
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-F 질문 있습니다.
#include <iostream> #include <string> using namespace std; int main() { string S; getline(cin, S); string result = ""; for (char c : S) { if (c >= 'A' && c < 'Z') { result += (((c - 'A') + 13 ) % 26) + 'A'; } else if (c >= 'a' && c <= 'z') { result += (((c - 'a') + 13 ) % 26) + 'a'; } else { result += c; } } cout << result; return 0; }이렇게 작성을 하고 실제 출력 값도 맞게 잘 나오는데 1%에서 틀렸습니다가 뜨는데 이유를 모르겠습니다...
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
침몰하는 타이타닉(그리디) 문제 질문
안녕하세요! 강의 잘 듣고 있습니다공부를 하다가 오래 고민해도 이해가 안되는 부분이 생겨서 질문 처음 남겨봅니다~ 침몰하는 타이타닉 (그리디) 문제에서 예를 들어무게가 100 90 80 80 80 80 40 30 20 10 인 10명의 사람들을 무게 한도가 140인 구명보트에 태울때강사님 풀이 대로면 100인 사람과 10 인 사람을 태우고90 인 사람과 20인 사람을 태우는 방식으로 시작해서(100,10) (90,20) (80,30) (80, 40) (80) (80) 이렇게 6개의 구명보트에 사람을 태우는데 저는 100인 사람과 40인 사람을 먼저 태워야한다고 생각을 했습니다.뭔가 강사님 풀이대로 100인 사람과 10 인 사람을 먼저 태우면 80 인 사람이 혼자 타게 되는데100이 40과 함께 타면 80 인 사람이 10 인 사람과 같이 탈 수 있으니 80은 혼자 타지 않아도 되서 cnt 가 최소가 되는게 아닌가 생각했습니다.( 즉 100 일떄 140 - 100 은 40 이니 40보다 작은 수 중에서 가장 큰 값을 구하는 방식으로 풀었습니다 이중 반복문을 사용합니다 (100, 40) (90, 20) (80, 20) (80, 10) (80) (80) ) 제가 제 방식, 강사님 방식으로 5시간정도 시뮬레이션 해 본 바로는 결국 결국 cnt는 같았습니다그런데 왜 같은지 논리적으로는 이해할 수가 없어요.. ㅠㅠ논리적으로 왜 같은지 혹시 설명해주실 수 있으실까요..
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
뮤직비디오 id 1 채점 실패
해당 케이스에서 DVD 최소 크기가 2이면, DVD의 개수는 [1, 1], [1, 1], [1] 총 3개가 되서 결과가 틀어야 하는게 아닌가 싶습니다! 제가 짠 코드로는 id 1 채점이 통과되지 않아 질문드립니다. import java.util.Scanner; public class Main { public static int solution(int n, int m, int[] arr) { int answer = 10_001; int lt = 0; int rt = 0; for (int x : arr) { rt += x; } while (lt <= rt) { int mid = (lt + rt) / 2; int midValue = mid + 1; int sum = 0; int cnt = 1; for (int i = 0; i < n; i++) { if (sum + arr[i] > midValue) { cnt++; sum = arr[i]; } else { sum += arr[i]; } } if (cnt > m) { lt = mid + 1; } else { rt = mid - 1; } if (cnt == m && answer > midValue) { answer = midValue; } } return answer; } public static void main(String[] args) { Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int m = kb.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = kb.nextInt(); } System.out.print(solution(n, m, arr)); } }
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
후위식 연산(postfix) 컴파일 에러
향상된 switch문 (arrow) -> 사용했는데 컴파일 에러 나는데자바 버전 문제 때문인건가요?컴파일에러/judger/run/1d73365da4a4439f86329fcf18ad31c5/Main.java:24: error: : expected case '+' -> stack.push(lt+rt); ^
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-O 4949번 문제 질문있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 나름 간소화하여 풀었는데 반례를 못 찾겠습니다 ㅠㅠhttps://www.acmicpc.net/source/87277567
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-C 질문있습니다
http://boj.kr/bd886da1402c420f8b5d6e75d1cdf360 혹시 반례 부탁드려도 될까요?반례를 구한다면 어떤 방식으로 반례 값을 설정할지도 궁금합니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 불! 코드 질문있습니다
http://boj.kr/ad93c77cfed245858c644f3adb037853큰돌님 작성한 코드의 42번 if 문은 있어도 없어도 둘 다 통과하는데if 문이 없어도 되는 이유가 J 값이 처음부터 가장자리면 바로 출력하면 되는 거고 가장자리가 아니더라도53번의 if문을 통해서 fvisited 값보다 무조건 작은 jvisited 값이 가장자리까지 가는 로직이라서 그런 거죠 ??
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-G 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하십니까 선생님, 어느 부분에서 틀렸는지 도움 부탁드립니다.http://boj.kr/9f99ed1c47a842b9af37e728a08dccee
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
알고리즘
이것좀 풀어주세요 ㅜ
-
해결됨[자바/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 하는게 맞지 않나?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
TreeSet을 사용하는 이유
안녕하세요! 저는 HashSet을 사용해서 풀었는데요!public int solution(int n, int k, int[] arr) { int answer = -1; // HashSet으로 변경 Set<Integer> set = new HashSet<>(); // 모든 3개 조합의 합을 HashSet에 추가 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int l = j + 1; l < n; l++) { set.add(arr[i] + arr[j] + arr[l]); } } } // HashSet을 List로 변환 List<Integer> list = new ArrayList<>(set); // 내림차순 정렬 Collections.sort(list, Collections.reverseOrder()); // K번째 값 반환 if (list.size() >= k) { return list.get(k - 1); } return answer; }커뮤니티 보니 treeSet을 사용하는 이유가 "같은 숫자의 카드가 여러장 있을 수 있습니다."라고 하셨는데, 강의 내에 코드는 3개의 카드를 더한 값에 대한 중복 제거지, 각 카드 숫자에 대한 중복을 제거하는건 아니지 않나요..??hashSet을 사용하는게 O(n3)로 시간복잡도가 더 나은 것 같은데 treeSet을 사용해야 하는 이유를 아직 이해 못했습니다 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-0 질문 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님 제가 풀이한건데 문제에 예시 입력을 했을 때 맞게 나오고 다르게 해봤는데 맞게 나왔는데 어떤 부분 때문에 틀렸는지 도저히 몰라 질문 남깁니다. 어떤 반례가 있길래 이럴까요??#include<bits/stdc++.h> using namespace std; string s; int n,cnt,ret =-987654321,start; stack<char>st; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin >> n >> s; for(char c : s){ if(st.size() && st.top() == '(' && c == ')'){ cnt += 2; st.pop(); }else if(st.size() && st.top() == ')' && c == '('){ while (!st.empty()) st.pop(); st.push(c); cnt = 0; }else{ st.push(c); } ret = max(ret, cnt); } cout << cnt << "\n"; return 0; }