묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질투심 4도 조건 위배는 아니지 않나요
질투심 4면 최솟값이 아니어서 답이 아닌것이지, 조건 위배는 안되지 않나요레드 4, 블루 4, 블루 3, 나머지 두명은 못받음도 나눠줄 수 있지는 않나요
-
해결됨38군데 합격 비법, 2026 코딩테스트 필수 알고리즘
1주차 숙제 추가문제 질문 드립니다!
안녕하세요 딩코님!1주차 숙제에서 추가로 주신 문자열 요약해보기를 풀었는데 JAVA로 진행중입니다! // 아스키코드 방식 public static StringBuffer summarizeString(String str) { int[] strArr = new int[26]; for(int i =0;i<str.length();i++){ int index = (int)str.charAt(i) - (int)'a'; strArr[index] += 1; } StringBuffer strbuf = new StringBuffer(); for(int i =0;i<strArr.length;i++){ if(strArr[i] > 0){ strbuf.append((char)(i+(int)'a')).append(strArr[i]+ " "); } } return strbuf; } public static void main(String[] args) { String inputStr = "acccdeee"; System.out.println(summarizeString(inputStr)); } // 문자열 뒤집기 방식 public static StringBuffer summarizeString(String str) { int count = 0; StringBuffer strBuf = new StringBuffer(); for(int i = 0;i < str.length() - 1; i++){ if(str.charAt(i) == str.charAt(i+1)){ count++; }else{ strBuf.append(str.charAt(i)).append(count + 1).append("/"); count = 0; } } strBuf.append(str.charAt(str.length() - 1)).append(count + 1); return strBuf; } public static void main(String[] args) { String inputStr = "acccdeee"; System.out.println(summarizeString(inputStr)); } 저는 아스키 코드를 사용해서 풀었는데 딩코님이 적어주신 답안지를 보니 바로 전에 풀어본문자열 뒤집기와 유사하게 풀이를 해주셨더라구요그래서 그걸 참고해서 작성해보니 둘다 똑같이 시간복잡도는 O(n)의 성능을 가지고있는거같고다른점은 아스키 코드형식은 무조건 결과값이 abc순으로 출력이되고문자열뒤집기 방식은 입력받은 순서대로 나오는거말고는 다른점은 찾을수가없었습니다. 해당 문제는 해설영상이 없어서 혹시 제가 문제를 이해못해서 잘못 작성한건가 해서 질문남깁니다! 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
미해결김영한의 실전 자바 - 중급 2편
TreeSet 구현 그림 그려주세요 제발
이런 식으로 TreeSet 도 구현 해서 그려주세요 ㅜㅜ 이런 그림 없으면 이해 안가요 제발 ㅠㅠ 김영한 강사님 소환해서 그려주세요 제발 부탁드립니다 진짜 ㅠㅠ
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Arrays.stream 사용은 코딩테스트 평가에 영향을 미치나요?
안녕하세요 강사님, 프로그래머스로 문제를 풀던 중 Arrays.stream() 같은 문법에 대해 궁금한 점이 생겨 질문드립니다.전통적인 반복문 방식으로 문제를 해결하는 방법과 Arrays.stream()과 같은 고급 문법을 활용하는 방식은 채점 시 동일한 배점으로 평가되는지, 또는 코드의 간결성과 가독성을 고려해 차이가 발생할 수 있는지 궁금합니다.실전 코딩 테스트나 채점 기준에서 어떤 점을 더 중요하게 보시는지도 함께 여쭤보고 싶습니다. 감사합니다!
-
해결됨38군데 합격 비법, 2026 코딩테스트 필수 알고리즘
k번째 값 출력하기 문제에서 이렇게 풀어도 되나요?
2주차 끝 숙제 중 링크드리스트의 끝에서 k번째 값 출력하기 문제를 처음에 먼저 혼자 풀어볼 땐 링크드리스트를 순회하면서 각 노드를 따로 생성한 배열에 담고 return 할 땐 -k 인덱스로 끝에서 k번째 값을 가져오도록 해봤습니다. 답은 나오긴 하는데 혹시 이런 식으로 풀어도 되나요?? cur = self.head arr = [] while cur is not None: arr.append(cur) cur = cur.next return arr[-k]
-
미해결개발 역량 + 자격증까지, Java로 PCCP 자격증 준비하기
실습 권한 부탁드립니다..
들어가지를 못하구 있어요 ..ㅠ
-
미해결김영한의 실전 자바 - 중급 2편
LinkedList 배열 선언에 관해서
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오): 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오): 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오): 예[질문 내용]LinkedList<Integer>[] buckets = new LinkedList[CAPACITY] 에서 제네릭을 이용한 배열 초기화를 한 이 부분에서 보통 제네릭으로 선언하면 LinkedList<Integer> buckets = new LinkedList<>() 이렇게 생성하는 것으로 아는데, 배열로 만들면 <>()은 생략되는건가요? 배열의 크기만 정하면 되는건가요?궁금해서 질문드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-B 로직이 어디가 틀렸는지 잘 모르겠습니다...
http://boj.kr/36465016d681417da63a8f5583fe7b79안녕하세요 강사님. 강의 잘 듣고 있습니다! 메인 로직은 강사님과 비슷하다고 생각하는데, 어디가 틀렸는지 잘 안보입니다...!l: 음악 길이 중 가장 큰 값, r: 음악 길이의 합while(l <= r) 안에서 sum+arr[i]가 mid보다 크면 cnt++, sum = arr[i] 이렇게 처리해도 될 것 같은데, 제가 잘못 생각한 부분이 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-O
문제에서 최대/최소값을 구할 때 결과를 담아 둘 변수에 최대값을 구할 땐 최소값을 저장하고, 최소값을 구할 땐 최대값을 저장해 모든 경우에 대해 업데이트합니다. 그래서 ret에 값을 저장해둬야합니다. 이런 상황에서 다소 귀찮더라도 저는 항상 문제 입력값을 기반으로 최대, 최소값을 구해서 저장하는 편입니다. 근데 큰돌님 영상을 보면 항상 최대 최소를 987654321, -987654321로 넣으시던데 별 생각 없이 그냥 이렇게 저장하고 문제 풀어도 문제가 없는건가요? 없다면 왜 그런건가요? int의 최대 최소값인 20억도 아니고 987654321로도 되는 이유가 궁금하네요
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
바텀업 방식을 연습해야 할까요?
dp를 어려워하다 강사님의 완전탐색 + 메모지에이션으로 탑다운으로 푸니 감이 잡혔습니다.바텀업은 바로 논리적인 점화식을 떠올릴 수 있어야 하는데 이 부분이 너무 어렵더라구요. 질문드립니다.dp를 모두 탑다운 (완전탐색 + 메모지에이션)으로만 연습해도 되는걸까요 바텀업은 너무 잘 안떠올려집니다.
-
미해결Do it! 알고리즘 코딩테스트 with Python
병합정렬이 홀수개의 숫자에 적용될 경우?
안녕하세요.병합정렬이 split and merge 방식을 사용하고 있는데 만약 홀수개에 적용되는 경우는 어떻게 작동하는지 알고리즘에 변화가 필요한지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-J 질문있습니다
안녕하세요 강사님2-J 문제에 대해서 조금 다른 방법으로도 풀어보았는데(http://boj.kr/ec5ccf849a484544b063b11fa55da87f) 다른 풀이들 둘러보니 거의 대부분 2차원 배열과 bfs를 이용한 풀이가 주를 이루고 있어서혹시 제가 한 방법이 비효율적인 방법이라거나 다른 이슈가 존재 하는지노파심에 궁금하여 질문 남깁니다! 퀄리티 높은 강의와 지속적인 피드백 늘 감사드립니다!
-
해결됨비전공자의 전공자 따라잡기 - 자료구조(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");
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
완탐 3-E 시간초과 관련 질문입니다.
https://www.acmicpc.net/source/93603480메모리 초과 날 수 있는 게 아무래도 정점을 6개씩 계속해서 넣다 보니까 queue에서 나는 거 같은데.. 막상 큰돌님 코드와도 큰 차이가 없는 거 같고.. 어떤 부분이 잘못돼서 메모리 초과가 났는지 궁금해요.
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Set.copyOf 컴파일 에러 문의드립니다
import java.util.*; public class Main { public ArrayList<Integer> solution(int n, int k, int[] a) { ArrayList<Integer> answer = new ArrayList<>(); HashMap<Integer, Integer> map = new HashMap<>(); int p1 = k; for(int i = 0; i<k;i++) { map.put(a[i],map.getOrDefault(a[i], 0) + 1); } answer.add(map.size()); while (p1 < n) { map.put(a[p1],map.getOrDefault(a[p1], 0) + 1); map.put(a[p1 - k], map.get(a[p1 - k]) - 1); for(int x : Set.copyOf(map.keySet())) { //값이 0인 key 제거 if (map.get(x) == 0) { map.remove(x); } } answer.add(map.size()); p1++; } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[] arr = new int[n]; for (int i=0; i<n;i++) { arr[i] = sc.nextInt(); } for (int x : T.solution(n, k, arr)) { System.out.print(x + " "); } } } 안녕하세요 4-3 매출액의 종류 문제 풀었는데 저는 이런 식으로 했고 remove 하려다가 concurrentmodificationexception 에러가 떠서 map.keySet() 을 복제로 만들기 위해 Set.copyOf를 했는데 이클립스에서는 문제없이 돌아가지만 코딩 채점에서는 컴파일 에러가 뜨더군요.이거 왜 이러는 걸까요?
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
5.동전분배하기 문제 밑에코드도 정답이될까요?
n = int(input()) c = [] for _ in range(n): b = int(input()) c.append(b) def DFS(L,first,second,third): global best a = max(first,second,third) - min(first,second,third) if a >= best: return if L == n: if a < best: best = a else: for i in range(n): if ch[i] == 0: ch[i] = 1 DFS(L+1,first+c[i],second,third) DFS(L+1,first,second+c[i],third) DFS(L+1,first,second,third+c[i]) ch[i] = 0 ch = [0] * n best = 10000000000000 DFS(0,0,0,0) print(best)
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
1090번 문제 질문
문제에 대한 정리가 필요해 질문 남깁니다.결국 문제는 1명, 2명, 3명 이렇게 차례대로 모였을 때1명 모이면 이동거리 최소 이동 거리 합 : n12명 모이면 이동거리 최소 이동 거리 합 : n2n명 모이면 이동거리 최소 이동 거리 합 : nn이런 최소값을 원하는 문제인거죠?그래서 1번 아이디어로 구현 했을 경우에는모든 좌표에 대해서 1명 모일 때 , 2명 모일 때 반복하면서모든 경우의 수를 찾아가는 가는 방법이고2번 아이디어의 경우는 모든 좌표를 볼 필요 없이 각각의 집 좌표만 보면 된다라는 생각을 해서각각의 집 좌표로 비교해서 경우의 수를 찾는 방법이고3번 아이디어는 각각의 집 좌표들을 모두 비교할 필요 없이 정렬 후 인원의 수 만큼 돌면서 작은 값이면 바꿔준다 방법이고이런 느낌으로 접근을 한게 맞는 걸까요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
숙제 검사 부탁드립니다.
출력에 변동을 주어서 레벨 별로 정점을 나오게 했습니다.코드가 맞는지 검사해주시면 감사하겠습니다.import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; public class Main { static boolean visit[]; static ArrayList<ArrayList<Integer>> graph; static int n; public static StringBuilder bfs(int v) { StringBuilder sb = new StringBuilder(); Queue<Integer> queue = new LinkedList<>(); queue.offer(v); visit[v] = true; int L = 0; while (!queue.isEmpty()) { sb.append(L).append(" : "); int len = queue.size(); for (int i = 0; i < len; i++) { int cv = queue.poll(); sb.append(cv).append(" "); for (int nv : graph.get(cv)) { if (!visit[nv]) { visit[nv] = true; queue.offer(nv); } } } L++; sb.append('\n'); } return sb; } public static void main(String[] args) throws Exception { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(bufferedReader.readLine()); n = Integer.parseInt(st.nextToken()); int m = Integer.parseInt(st.nextToken()); visit = new boolean[n + 1]; graph = new ArrayList<>(); for (int i = 0; i <= n; i++) { graph.add(new ArrayList<>()); } for (int i = 0; i < m; i++) { st = new StringTokenizer(bufferedReader.readLine()); int from = Integer.parseInt(st.nextToken()); int to = Integer.parseInt(st.nextToken()); graph.get(from).add(to); } System.out.println(bfs(1)); } }
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
그래프 최단거리(BFS) 질문이 있습니다.
두 번째로 푸는 방법에서 이해가 확실히 가지 않는 부분이 있습니다.정점을 방문할 때 ch[] 배열에 방문했다 표시를 하고 dis[] 배열에 값을 집어넣는다는 건 지금 이 정점을 방문했다는 건 무조건 최단거리이다라고 확신하고 넣는거라고 이해했는데 왜 그렇게 되는지 이해가 잘 가지 않습니다.처음 설명으로 이해하자면 레벨 관점에서 이미 전 레벨에서 해당 정점을 방문 했기 때문에(ex. 4번 정점을 방문했는데 지금이 2레벨이고 전 레벨인 1에서 4를 방문했을 때 ch[] 배열에 체크돼있음)라고 생각하면 되는걸까요?
-
미해결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을 더하는 제한사항이 보이지 않아 이해가 어려워 질문 드립니다