묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨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을 더하는 제한사항이 보이지 않아 이해가 어려워 질문 드립니다
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
아나그램 비교 코드
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 단순히 == 를 사용해서 코드를 짜면 안돼나요...?word_1 = input() word_2 = input() word_1_d = dict() word_2_d = dict() for x in word_1: word_1_d[x] = word_1_d.get(x, 0) + 1 for x in word_2: word_2_d[x] = word_2_d.get(x, 0) + 1 if word_1_d == word_2_d: print("YES") else: print("NO")
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-I 질문드립니다
안녕하세요 큰돌님. 덕분에 많은 도움 받으며 공부하고 있습니다. 공부 중에 6-I 파닭파닭 문제에서 질문이 생겼습니다.http://boj.kr/a3c8c4df3ccd47429c51f910440f47d1위 코드가 제가 제출한 코드인데요, 라면에 들어갈 남은 파의 길이를 계산하는 부분에서 저는 전체 파길이에서 사용한 파길이를 빼는 로직말고 나머지연산으로 계산하는 게 먼저 떠올라 나머지 연산을 통해 계산했습니다. 제가 생각했을 때는 두가지 경우 동일한 결과를 보여야 하는데 이 부분만 큰돌님처럼 전체에 파닭에 사용한 파 길이를 빼는 방식으로 바꾸니 정답이 맞더라구요.. 나머지 연산을 할 때 left가 0이 되는 경우도 따로 처리를 해줘서 문제가 없다고 생각했는데, 틀린이유가 뭘까요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요. 강의 난이도가 궁금합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 열심히 듣고 있는 학생입니다.선생님이 올려주신 강의 난이도가 리트코드? 프로그래머스 기준 어떻게 될까요?강의 문제를 다 풀수있다면 리트코드 미디움 정도는 쉽게 풀수있을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
예시에 대한 질문 2
선생님. 그렇게 그으면 ABAB 이 예시도 되는거 아닌가요? 위아래로 그으란 소리는 문제에 없는데요
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요. 우선순위 큐를 활용해서 문제를 풀어봤는데 시간 초과가 발생 합니다 ㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 시간초과가 발생 했는데 무조건 빅오n 내에 끝내야 하는 문제 인가요??아이디어는 가장 먼저 피로연에서 나가야하는 사람(스케쥴)을 큐(피로연)의 가장 앞에 두고 현재 도착한 사람(가장 최근 도착한 사람)의 도착 시간과 가장 먼저 나가야하는 사람의 출발 시간을 비교해서 큐에 있는 사람을 나가게 할지 남게 할지를 결정하도록 했습니다. 그런데 4번째 문제까지는 정답처리 되고 5번째 문제에서 시간 초과가 발생 하는데 혹시 n의 시간 복잡도로 풀어야 하는 문제인지 궁금해서 문의 드립니다! import java.util.*; public class Main { static public class Schedule { int arrive; int departure; public Schedule(int a, int d) { this.arrive = a; this.departure = d; } @Override public String toString() { return "Schedule{" + "arrive=" + arrive + ", departure=" + departure + '}'; } } public void solution(Schedule[] arr, int n) { Arrays.sort(arr, Comparator.comparing((Schedule s) -> s.arrive).thenComparing((Schedule s) -> s.departure)); Queue<Schedule> pq = new PriorityQueue<>(Comparator.comparingInt(o -> o.departure)); int maxCount = 0; for (int i = 0; i < n; i++) { Schedule arrived = arr[i]; if (! pq.isEmpty()) { Schedule remain = pq.peek(); if (arrived.arrive >= remain.departure) { pq.poll(); } } pq.offer(arrived); maxCount = Math.max(pq.size(), maxCount); } System.out.println(maxCount); } /* 5 5 15 12 13 14 18 15 20 20 30 */ public static void main(String[] args) { Scanner in=new Scanner(System.in); int n = in.nextInt(); Schedule[] input = new Schedule[n]; for (int i = 0; i < n; i++) { input[i] = new Schedule(in.nextInt(), in.nextInt()); } Main main = new Main(); // System.out.println(main.solution(n, m)); main.solution(input, n); } }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
예시에 관한 질문
안녕하세요 선생님. 문제 예시에 보면ABBABB가 좋은단어로 판별하고 있는데, 어떻게 이게 가능한건가요? 아치형 곡선을 그으면 어떻게 해도 선이 교차될수밖에 없는데 왜 좋은단어로 판단하는지 궁금합니다.
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코딩테스트 공부 관련 문의드립니다
안녕하세요 이번에 이직 준비를 위해 코딩테스트 공부하게되었습니다. 어제 '1.문자 찾기' 부분 강의 들었는데 강사님께서 말씀하셨던 것처럼 미리 문제를 푼 다음 강의를 들었습니다. Eclipse로 작업을 했고 어떻게 구현해야 할지는 알겠고 charAt() 이나 toLowercase() 함수들을 알고는 있었습니다. 하지만 함수 스펠링을 정확히 다 알지 못해서 자동완성으로 구현을 했고, char을 String으로 바꾸는 방법이 기억이 안 나서 구글링해서 String.valueOf 으로 하는 식으로 했었습니다.실제 코딩테스트 시험에서는 자동완성이나 생각 안 나는 함수에 대해선 서치를 못 하고 무조건 외워서 해야할까요? 그리고 시험장에서는 코딩을 다 해놓고 이클립스처럼 테스트 실행이 가능한지도 궁금합니다. 그리고 문제에서 문자열의 길이는 100을 넘지않고, 영어 알파벳으로만 구성되어 있다고 되어 있었는데 원래는 문자열의 길이를 100까지만 입력가능하게 하고, 영어 외에는 다른건 입력 못하게 제어를 해야 하나요? 아래는 제가 제출했던 코딩입니다.import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.nextLine().toLowerCase(); String b = sc.nextLine().toLowerCase(); int cnt = 0; for (int i = 0; i< a.length();i++) { if (b.equals(String.valueOf(a.charAt(i)))) { cnt++; } } System.out.println(cnt); } }
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 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군데 합격 비법, 2026 코딩테스트 필수 알고리즘
수업 질문
안녕하세요! 기업 코딩테스트의 환경이 pycharm이랑 같은지 궁금합니다. 구글 코랩환경은 하나씩 행마다 빠르게 코드를 확인해보면서 볼 수 있는데 pycharm은 한꺼번에 돌려야 하고 함수 안에 print를 넣어서 간접적으로 확인해야하니 불편해 여쭤봅니다..!ctrl + R을 누르면 pycharm에서 실행이 된다고 하는데 저는 pycharm에서 실행 버튼의 단축키가 ctrl +f5로 뜹니다,,! 단축키로 쓰기에는 너무불편한데, ctrl+R로 단축키를 바꾸신건지 저는 해당 단축키로는 실행이 되지 않아 여쭤봅니다! 코랩이 아닌 pycharm으로 수업을 진행하신 특별한 이유가 있으신지도 궁금합니다!! 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-V 질문드립니다.
안녕하세요 큰돌님 항상 강의 잘 듣고 있습니다.제가 문제를 풀때는 누적합 배열을 따로 만들 생각은 하지 못했지만 그 외에는 큰돌님 해설과 크게 다르지 않은 로직을 짰습니다.각각의 구간합에 따라서 나오는 경우의 수를 저장해서 그 값을 저장해서 전체 경우의 수를 구했는데 틀렸습니다.혼자 꽤 많이 고민해봐도 안 풀려서 도움 요청드립니다...http://boj.kr/9cb558c760814634a41a2e9792edea05
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
재귀 풀이 시간초과 질문
안녕하세요. 저는 해당 문제 아래와 같이 풀었는데 시간초과가 납니다. 선생님 풀이랑 로직은 비슷한거같은데 혹시 어떤 부분이 문제일까요/http://boj.kr/3727721ddb6347ceb1f0431851c1cf8c