묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-A 2792 보석 상자 런타임 에러 (DivisionByZero) 질문이 있습니다.
안녕하세요 선생님 !항상 좋은 강의 감사합니다. 이번 보석 상자 강의도 너무 잘 들었는데요, 처음에 혼자 생각해보다가 못 풀고 강의 보고 다시 정리해서 풀어봤습니다. 그런데 첫 제출에서 DivisionByZero 에러가 나서 99% 정도에서 틀렸다고 나오더라고요 탐색을 하는 부분에서 mid가 0일 때 return false를 줘서 두 번째 제출에 성공하긴 했는데, 첫 코드도 선생님 코드와 거의 비슷한 것으로 보여서요 어떤 부분이 잘못됐는지 궁금합니다 ! DivisionByZero 난 코드: https://www.acmicpc.net/source/77479342정답 코드: https://www.acmicpc.net/source/77479392 감사합니다 !!!!!!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
Map에서 BFS탐색을 하는 경우에도 O(V+E) 시간복잡도인가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.2-A 2178번처럼 Map에서 BFS 탐색을 하는 경우에도 시간복잡도는 O(V+E)인가요?감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
문제풀이 질문 드립니다
처음 알고리즘을 공부하게 된 학생입니다.알고리즘 문제풀이를 시작할 때 어떤 방식으로 하면 될지 질문드립니다.우선 교안은 한번 다 익혔습니다. (중간 중간 생각나지 않는 부분도 있긴합니다.) 2309번 문제를 스스로 풀어본다.문제해설을 본다.문제해설을 다 이해하고 공부한 뒤 강의를 듣는다. 이러한 순서로 공부를 하는게 맞을까요? 그리고 문제가 풀리지 않을때는 고민해보다가 답지를 보는게 나을까요??
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 문제 3 ~ 5번에 문제가 있는것 같습니다.
코드를 작성하고 돌려보니1 ~ 2 pass였지만 나머지 3 ~ 5번에서 문제가 발생하였습니다.그래서 코드를 다시 확인을 해봐도 원인를 못 찾았다.그래서 강사님의 코드로도 체점을 진행해보니 동일한 결과가 발생하였습니다.그래서 in 3 ~ 5을 보니 문제와 다르게 배열의 크기가 100,000 으로 설정되어 있는 것을 발견하였습니다.아마 제 예상으로는 in 3 ~ 5까지의 문제가 다른 문제로 바꾼 것 같습니다. 한번 확인해주시면 감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-B 문제 메모리 초과 문의
안녕하세요 선생님,4-B 문제를 선생님 풀이를 보고 다시 풀어봤습니다.입력배열 A의 크기를 문제에서 주어진 최댓값인 20으로 설정할 때는 메모리초과로 오류가 나는 데, 혹시나 해서 21로 늘려보니 통과했습니다. http://boj.kr/985212f27de447b19f0c9794794c53e6http://boj.kr/915ba15212a94c9782d0a40dc8e1ce0c 어디서 문제가 생기는 지 알 수 있을까요?강의 항상 잘 보고 있습니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-M 시간초과 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/ef8ad015457e4bbba05ac351eb5ae0d8안녕하세요 강사님 7-M 문제에서 살아있는 나무는 정렬을 위해 deque를 사용했고죽은 나무는 queue를 사용해서 양분으로 바꿔줬는데 계속 시간초과에서 막혀 질문글 남깁니다...이 문제는 deque로 풀면 안되는 문제일까요? 아니면 제 코드에서 시간을 단축 시킬만한 곳이 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-C 입력 질문 있습니다.
for(int i = 1; i <= n; i++){ cin >> m; for(int j = 0; j < m; j++){ cin >> temp; adj[i].push_back(temp); adj[temp].push_back(i); } }입력을 받아서 인접 노드들을 벡터에 삽입해주셨는데, adj[temp].push_back(i); 이 부분이 들어가게 되면 같은 노드가 2번씩 벡터에 삽입되지 않나요? 예를 들어, 예제 입력 1에서 보면 1~6번 구역마다 인접 구역을 입력으로 받으니까 adj[i].push_back(temp); 이코드만 있어도 양방향 간선이 표시된다고 생각합니다. a[1] => {2, 4}a[2] => {1,3,6,5}a[3] => {4, 2}a[4] => {1, 3}a[5] => {2}a[6] => {2}이렇게요
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
최대 선호 음식 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 제출하니까 시간초과가 뜹니다. 어디가 잘 못 된건가요??import java.io.*; import java.util.*; public class Main { public static int[] pow, st; public static int n,d,k,answer=Integer.MIN_VALUE; public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); n=sc.nextInt(); d=sc.nextInt(); k=sc.nextInt(); pow = new int[d+1]; st = new int[n+1]; pow[1]=1; for(int i=2; i<=d; i++) pow[i] = pow[i-1]*2; for(int i=1; i<=n; i++) { int num, m; m=sc.nextInt(); for(int j=0; j<m; j++) { num=sc.nextInt(); st[i] += pow[num]; } } dfs(0,0,0); System.out.print(answer); } public static void dfs(int L, int s, int bit) { if(L==k) { int cnt=0; for(int i=1; i<=n; i++) if((bit&st[i])==st[i])cnt++; //st[i]가 bit의 부분집합이라면 cnt증가 answer = Math.max(answer, cnt); //최대값 갱신 } else { for(int i=s; i<d; i++) { //조합으로 탐색 dfs(L+1, i+1, bit+pow[i]); } } } }
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
숨겨진 합 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 답이 틀렸다고 나오는데, 어디가 잘 못 된건지 궁금합니다.import java.io.*; import java.util.*; public class Main { public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); String s=sc.next(); int res=0; int sum=0; for(char x : s.toCharArray()) { if(Character.isDigit(x)) { res = res*10 + (x-48); } else { sum+=res; res=0; } } System.out.print(sum); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
어떤 부분이 문제일까요?
http://boj.kr/f9e04dedecf9402eb6e1bcb1042dcfa6선생님 안녕하세요.선생님이 작성해주신 답이랑 비교해봤을 때, 차이가 나는 부분은 if문을 통해 idx가 a[i].first보다 큰지 작은지를 가른뒤, 계산해주는 부분밖에 없는 것 같습니다. 선생님께서는 a[i].second - a[i].first 또는 idx 이런식으로 직접 해주셨고, 저는 s라는 변수에 a[i].first 또는 idx 를 담아줘서 계산해준 것 밖에 차이가 없다고 생각하는데요.어떤부분이 달라서 정답이 아니라고 나오는 걸까요?? (if(a[i].second <= idx) continue; 이부분은 문제에 웅덩이는 겹치지 않는다는 조건이 있어서 넣지않았습니다.)
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
11. 임시반장 정하기
59 8 7 6 55 6 7 8 91 2 3 7 84 5 3 4 26 2 8 4 2 이예제의 답이 왜 3번학생인가요 4번학생이이 제일 많이 겹치는거 아닌가요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
백준 1816 Javascript
로컬 테스트에서는 잘 동작되는데, 백준에서는 계속 '틀렸습니다' 오답 상태입니다JS 문법상 고려해야할 사항을 빼먹은 건지, 어떤 다른 테스트 케이스의 경우를 고려 못한 건지 모르겠네요🥺
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 채점결과
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.#include<stdio.h> #include<algorithm> using namespace std; int a[1001], n; int Count(int s){ int i, cnt=1, sum=0; for(i=1; i<=n; i++){ if(sum+a[i]>s){ cnt++; sum=a[i]; } else sum=sum+a[i]; } return cnt; } int main(){ //freopen("input.txt", "rt", stdin); int m, i, lt=1, rt=0, mid, res, maxx=-2147000000; scanf("%d %d", &n, &m); for(i=1; i<=n; i++){ scanf("%d", &a[i]); rt=rt+a[i]; if(a[i]>maxx) maxx=a[i]; } while(lt<=rt){ mid=(lt+rt)/2; if(mid>=maxx && Count(mid)<=m){ res=mid; rt=mid-1; } else lt=mid+1; } printf("%d\n", res); return 0; } 강사님께서 직접 올려주신 코드 복사해서 돌려봐도 채점 결과가 아래 사진과 같이 뜹니다 그동안 다른 문제들 채점 프로그램은 이상이 없었는데 43번만 채점결과가 이상해서 질문 드립니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
21번 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 21번 문제 질문드립니다.문제에서 두 사람 모두 0-9까지 카드를 중복없이 각 한 장씩 갖고 있다고 하였는데, 코드 상에서 이에 대한 예외처리가 없어 scanf로 데이터 넣어주는 부분에서 이중 for문을 돌리면 될까요?다른 좋은 방법이 있을지 문의드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2776 암기왕 문제 시간복잡도에 관해 질문이 있습니다
안녕하세요 큰돌님암기왕 문제를 map을 사용한 경우 탐색에 log(n)의 시간복잡도를 갖는데, 이분탐색을 사용한 방법과 시간차이가 커서 질문드립니다. sort를 사용하는 경우에 정렬에 nlog(n), 값을 찾는데 log(n)이 걸리며,map을 사용하면 삽입에 n * log(n), 값을 찾는데 log(n)이 걸리니 결국 비슷할거라 생각했는데 시간차이가 2배나 나는 이유를 모르겠습니다 ㅜ#include<bits/stdc++.h> using namespace std; int t, n, m, temp; int main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); cin >> t; for(int i = 0; i < t; i++){ map<int, int> mp; cin >> n; for(int j = 0; j < n; j++){ cin >> temp; mp.insert({temp, 0}); } cin >> m; for(int j = 0; j < m; j++){ cin >> temp; if(mp.find(temp) == mp.end()) cout << 0 << '\n'; else cout << 1 << '\n'; } } return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-J 풀이가 가지 않아서 질문드립니다
안녕하세요 큰돌님.풀이를 몇번을 봤는데도 이해가 가지 않아서 질문드립니다. 이분탐색으로 찾으려는 것- 실제 필요한 시간보다 조금 더 큰 시간- 즉, ret이 놀이기구를 타는데 걸린 총 시간이 됨ret - 1 / a[i] - ex) 문제 예시 들어주신 것처럼 4분이 딱 되었을 때 새롭게 타는 사람 수를 빼주기 위해 하는 로직전체 묶음을 다 처리하고 놀이기구에 아무도 안 탄 상태로 가정하고 그 부분부터 한명씩 태우는 로직 이렇게 파악하긴 했는데, 아무리 봐도 2번, 3번이 전혀 이해가 가지 않습니다... 놀이기구 수만큼을 바로 태울 필요가 있나요? 처음 시작을 temp = m으로 시작하지 않고 temp = 0을로 시작하면 4분일 때 딱 7명 태운걸로 나와서 ret - 1 / a[i] 로직을 안해도 되지 않나요? 그리고 마지막에 총 걸린시간(ret) % a[i] 로직이 어떤 의미인건지 이해가 안 됩니다 ㅠㅠ 아래는 제가 선생님 코드를 이해하려고 주석을 달아본 코드입니다.#include<bits/stdc++.h> using namespace std; #define max_n 60000000004 #define MAX_M 10004 typedef long long ll; // ret : 총시간, temp가 m : 여기서 부터 시작 ll n, m, a[MAX_M], lo, hi = max_n, ret, mid, temp; bool check(ll mid) { temp = m; // 놀이기구 수만큼은 바로 태울 수 있으므로 m명은 태우고 시작 for (int i = 0; i < m; i++) temp += mid / a[i]; return temp >= n; // 총 걸리는 시간이 mid일 때 n명이상 태울 수 있는지 } int main() { cin >> n >> m; for (int i = 0; i < m; i++) cin >> a[i]; if (n <= m) { cout << n; return 0; } while (lo <= hi) { mid = (lo + hi) / 2; if (check(mid)) { ret = mid; // 총 걸린 시간 hi = mid - 1; } else lo = mid + 1; } // temp : 4분까지 태운 학생 수 -> 4분이 딱 됐을 때 바로 추가로 태울 수 있는데 그걸 뺀 순수하게 4분까지 태운 학생 수 temp = m; for (int i = 0; i < m; i++) temp += ((ret - 1) / a[i]); // 4분부터 시작해서 다시 순차적으로 놀이기구 태움 -> 즉, 여기서는 놀이기구에 아무도 타있지 않은 초기 상태임 for (int i = 0; i < m; i++) { if (ret % a[i] == 0) temp++; // % 연산의 결과가 0이 아날 경우 == 놀이기구에 이미 학생이 탑승되어 있음 if (temp == n) { cout << i + 1 << "\n"; return 0; } } return 0; }
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
제품이동 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 시간 초과라고 뜨는데, 더 빠른 방법이 있나요??import java.io.*; import java.util.*; class Node{ int v; int c; Node(int v, int c){ this.v=v; this.c=c; } } public class Main { public static ArrayList<Node>[] graph; public static int n,m,s, e; public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); n=sc.nextInt(); m=sc.nextInt(); graph = new ArrayList[n+1]; for(int i=1;i<=n; i++) graph[i] = new ArrayList<>(); for(int i=0; i<m; i++) { int a=sc.nextInt(); int b=sc.nextInt(); int c=sc.nextInt(); graph[a].add(new Node(b,c)); graph[b].add(new Node(a,c)); } s=sc.nextInt(); e=sc.nextInt(); int lt=1; int rt = 1000000000; int answer=0; while(lt<=rt) { int mid = (lt+rt)/2; if(count(mid)==1) { //e정점까지 갈 수있으면 answer=mid; lt = mid+1; //최대의 답을 찾아야하니까 } else rt = mid-1; } System.out.print(answer); } public static int count(int limit) { int[] ck = new int[n+1]; Queue<Node> q = new LinkedList<>(); q.add(new Node(s,0)); ck[s]=1; while(!q.isEmpty()) { Node now = q.poll(); int nowx = now.v; int nowc = now.c; for(Node ob : graph[nowx]) { if(ob.c>=limit && ck[ob.v]==0) { q.add(new Node(ob.v, ob.c)); ck[ob.v]=1; } } } return ck[e]; //마지막 점까지 갈수 있다면 1리턴, 아니면 0리턴 } }
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
HashMap에서 map.KeySet() 정렬관련 질문있습니다.
입력 순서가 BACDE 이면 HashMap을 배열로 생각하였을 때, 순서대로 저장된다면 KeySet()의 배열은 [B, A, C, D, E]가 되는게 맞지 않나요? for(char x : keySet())의 출력 값이 ABCDE로 나오는 것을 보면 별다른 sort과정 없이 HashMap에서 Key 값을 정렬해서 출력해주는 것으로 보입니다. HashMap에 존재하는 Key값들이 자동적으로 정렬이 되고 있다고 봐도 될까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
DP 풀이방법에 있어 탑바텀, 바텀업 풀이 방식의 선택 방식
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 ^^강의 너무 잘 듣고 있습니다. DP 문제를 풀다보면.., 시작하기 전에 해당 문제를 바텀업으로 풀어야할지, 탑바텀으로 풀어야할지 어떻게 결정할 수 있을까요?제 느낌은 바텀업풀이가 점화식을 유도할 수 있다면 코드 자체가 간단하여(재귀호출x) 구현 난이도가 쉬운데, 점화식을 생각하는 과정이 경우에 따라 매우 어려운것 같습니다. 탑바텀 풀이는 완전탐색과 동일한 상태에서 메모이제이션 을 잘 정의함으로써 문제를 풀 수 있는데, DP배열의 상태정의를 어떻게 하느냐에 따라, 테스트케이스는 맞지만 제출시 틀리는 결과가 나오는 경우가 종종있습니다 (구현에서 실수 잦음) 어떤 식으로 DP의 풀이를 결정하고 문제를 들어가는지 질문드려요. 감사합니다.!!
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
송아지 찾기2 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래와 같이 작성했는데, 4번째 테스트 케이스에서 답이 출력 되지 않습니다. 어디가 잘 못된건지 궁금합니다.import java.io.*; import java.util.*; public class Main { public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); int s=sc.nextInt(); int e=sc.nextInt(); int k=sc.nextInt(); int[] ck = new int[10001]; for(int i=0; i<k; i++) { //웅덩이 체크 int a=sc.nextInt(); ck[a]=1; } Queue<Integer> q = new LinkedList<>(); q.add(s); int L=0; while(!q.isEmpty()) { int len = q.size(); for(int i=0; i<len; i++) { int now = q.poll(); if(now==e) { System.out.print(L); System.exit(0); } for(int nx : new int[] {now-1,now+1,now+5}) { if(nx>=1 && nx<10001 && ck[nx]==0) { //이동할 수 있는 범위이고, 아직 방문 안했고, 웅덩이가 아니라면 ck[nx]=1; q.add(nx); } } } L++; } } }