묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요. 5-B 문제 시간복잡도 질문 드립니다.
선생님 안녕하세요. 우선 강의 잘 듣고 있습니다. 감사합니다.다름이 아니라, 제가 5-B 문제를 선생님 풀이방법과 거의 유사하게 풀었는데 답안 제출 시 시간초과가 발생하여 질문 드리게 되었습니다.1차 for문을 돌면서 original 문자열을 1개씩 순회하며, 새로운 문자열을 만들어가며 폭탄 문자열 길이 이상이 되었을 때 뒤에서부터 폭탄 문자열과 비교하며 같으면 erase()로 제거하는 방식까지는 선생님 풀이방법과 똑같습니다. 다른 부분은 뒤에서부터 폭탄 문자열과 비교하는 부분입니다. 선생님께서는 substr을 만들어서 == 비교연산자를 통해 폭탄문자열을 찾으셨는데요. 저의 경우, 아래 링크로 공유드린 코드와 같이 check() 라는 함수를 만들었고, 거기서 폭탄문자열 길이만큼 for문을 돌며 폭탄문자열이 존재하는지 체크를 한 후, 존재하면 erase()를 하도록하였습니다. 즉, 폭탄문자열 체크하는 부분만 다르며, 선생님 풀이처럼 substr 후 == 비교연산자로 체크하는 부분으로 수정을 하면 시간초과없이 통과가 되는데, 제가 작성한 check() 함수를 사용하면 시간초과가 납니다.제가 생각했을 때는 check()도 O(N)이고, == 비교연산자도 O(N)일 것으로 생각이 드는데 왜 check() 함수를 사용하면 시간초과가 나는지 이해가 안가서 질문드립니다. == 비교연산자가 O(N)이어도 문제 상에서 폭탄 문자열의 최대길이가 36 정도이기 때문에 시간초과가 발생하지 않았다고 생각을 했었고, 따라서 O(N)인 check() 함수도 시간초과가 발생하지 않을 것으로 생각했었습니다.http://boj.kr/fa122a7d9a5e456388da1c04be04ff69 감사합니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제에서 튜플 사용하는 이유가 뭔가요?
섹션4- 5. 회의실 배정(그리디) 문제에서리스트가 아닌 튜플을 사용하는 이유가 뭔가요 ? meeting.append((s,e))
-
미해결입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]
최솟값의 위치
안녕하세요! 코딩테스트를 처음 준비하는거라 잘 모르는데..최솟값의 위치에서 그냥 min함수 이용하면 안되는 건가요...?nums = [7,10,5,3,2,15,19] min_value = min(nums) print(nums.index(min(nums)))이런 식으로 하면 금방 나올텐데원래 코딩 테스트는 순차탐색을해서 풀어야하는건가요? 잘 몰라서 여쭤봅니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 시간초과 질문 있습니다.
http://boj.kr/5a31400e6a0e4bea85a7f0082562729d안녕하세요 좋은 강의 잘 보고 있습니다.저는 이 문제를 보고백조가 이동해서 다른 백조에게 닿을 수 있는지 판단 => dfs1이 아닐 때, bfs로 물 녹이기반복이렇게 생각해서 풀었고, 공유 소스나 다른 분들 질문을 보고 1번에서 dfs로 풀면 불필요한 과정을 더 수행하기 때문에 틀렸다는 것 또한 이해했습니다.질문드릴 부분은제 코드에서 dfs 말고도 다른 불필요한 로직이 있었는지문제를 마주했을 때 dfs를 선택하면 안될 이유가 있었는지, 그걸 어떻게 제가 판단해야 할지=> 저는 1번 생각하자마자 dfs를 떠올렸고 시간초과를 띄우고 나서야 틀린걸 알았는데, 틀리기 전에 판단하려면 어떻게 해야 할까 싶어서 질문드립니다.위 두가지 입니다.감사합니다. ㅎㅎ..
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
선생님, DFS 설명 예시 코드에서 n의 크기에 대해 질문이 있습니다!
안녕하세요 선생님! 4분33초부터 시작하는 DFS 예시 코드에 관련해서 질문이 있습니다.선생님이 보여주신 그래프를 보면 노드의 개수가 총 5개인데 n의 크기를 보면 6이라고 되어 있네요.처음에는 2와 4가 양방향으로 연결돼 있기 때문에 그런가 싶었는데 이걸 인접리스트로 표현하는 코드에선 n을 4로 하셔서 뭔가 제가 잘못 생각하고 있는가 싶어서 질문드립니다.n의 크기를 노드 개수대로 5로 수정해서 코드를 돌려보면 3번 노드를 탐색을 안 하는 걸 보면 n이 6이 돼야 할 거 같은데 왜 6이 되는지 이해가 잘 가지 않습니다 ㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
학습 방법에 대한 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님.2주차까지는 어느정도 문제를 풀고 해설을 볼 수 있었는데3주차 부터는 문제 해결을 못해서 강의를 보고 있습니다.지금 계속 이런 상태라 학습을 제대로 하고 있는지 모르겠습니다. 일단 문제를 한 시간정도 보고 안풀려서 강의를 보고다시 문제를 풀어 보고있는데 강사님의 풀이를 그냥 따라치는게게 아닌가 하는 걱정이 들어서 질문합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 작성해도 괜찮은걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결자바 코딩테스트 - it 대기업 유제
방향바꾸기 문제 질문드립니다.
import java.io.*; import java.util.*; class Node implements Comparable<Node>{ int x; int y; int c; Node(int x, int y, int c){ this.x=x; this.y=y; this.c=c; } @Override public int compareTo(Node o) { return this.c-o.c; } } class Main { public int solution(int[][] board) { int answer = 0; int n=board.length; int m=board[0].length; int[][] dist =new int[n][m]; int INF = (int)1e9; PriorityQueue<Node> q = new PriorityQueue<>(); q.add(new Node(0,0,0)); for(int i=0; i<n; i++) Arrays.fill(dist[i], INF); dist[0][0]=0; int[] dx = {0,0,1,-1}; int[] dy = {1,-1,0,0}; while(!q.isEmpty()) { Node tmp = q.poll(); int nowx = tmp.x; int nowy = tmp.y; int nowc=tmp.c; int dir = board[nowx][nowy]-1; if(nowc>dist[nowx][nowy]) continue; for(int i=0; i<4;i++) { int nx = nowx+dx[i]; int ny = nowy+dy[i]; if(i==dir && dist[nx][ny]>nowc) { dist[nx][ny] = nowc; if(q.add(new Node(nx,ny,dist[nx][ny]))); } else if(i!=dir && dist[nx][ny]>nowc+1) { dist[nx][ny] = nowc+1; q.add(new Node(nx,ny,dist[nx][ny])); } } } answer = dist[n-1][m-1]; return answer; } public static void main(String[] args){ Main T = new Main(); System.out.println(T.solution(new int[][]{{3, 1, 3}, {1, 4, 2}, {4, 2, 3}})); System.out.println(T.solution(new int[][]{{3, 2, 1, 3}, {1, 1, 4, 2}, {3, 4, 2, 1}, {1, 2, 2, 4}})); System.out.println(T.solution(new int[][]{{3, 2, 1, 3, 1, 2}, {2, 1, 1, 1, 4, 2}, {2, 2, 2, 1, 2, 2}, {1, 3, 3, 4, 4, 4}, {1, 2, 2, 3, 3, 4}})); System.out.println(T.solution(new int[][]{{3, 2, 1, 3, 1, 2, 2, 2}, {2, 1, 1, 1, 4, 2, 1, 1}, {2, 2, 2, 1, 2, 2, 3, 4}, {1, 3, 3, 4, 4, 4, 3, 1}, {1, 2, 2, 3, 3, 4, 3, 4}, {1, 2, 2, 3, 3, 1, 1, 1}})); System.out.println(T.solution(new int[][]{{1, 2, 3, 2, 1, 3, 1, 2, 2, 2}, {1, 2, 2, 1, 1, 1, 4, 2, 1, 1}, {3, 2, 2, 2, 2, 1, 2, 2, 3, 4}, {3, 3, 1, 3, 3, 4, 4, 4, 3, 1}, {1, 1, 1, 2, 2, 3, 3, 4, 3, 4}, {1, 1, 1, 2, 2, 3, 3, 1, 1, 1}})); } }이렇게 작성하니까 배열 길이가 맞지 않다고 뜹니다.어디가 잘 못된건가요???
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-N 붙일 수 있는 최대크기의 종이를쓴다
증명 까진 안되나요 일종의 그리디 인가요
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
문제 pdf
강의를 듣기 전 문제를 먼저 혼자 풀어보려고 하는데, 혹시 문제 pdf 는 어디에서 확인할수 있는건가요?? 아무리 찾아봐도 안나오네요 ㅜㅜ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
인구 이동문제 로직 의문점
큰돌님 안녕하세요 제가 문제를 잘 못 이해한게 아닌가 싶지만 질문 드려봅니다! 문제에서는 인접한 국가 인구의 차이가 특정 범위에 해당한다면 (연합국의 인구수) / (연합국의 개수) 로 배열을 변경한다 인데그럴려면 먼저 dfs로 모든곳을 전부 순회한뒤에 구한 연합국의 인구수 / 연합국의 개수로 최종적으로 계산을 해줘야 할것같은데 정답코드 같은경우 커넥티드 컴포넌트에 해당되면 해당 컴포넌트 내에서 sum / v.size() 를 해주더군요 이렇게 되면 중간에 구해진 sum(인구수) v.size() (연합국의 개수) 로 구해지기 때문에 그다음 커넥티드 컴포넌트와 이전의 커넥티드 컴포넌트의 값이 다르게 되지 않나요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임 에러 질문 있습니다.
배열 11. 임시반장 정하기 에서 문제를 풀고 있는데해당 코드에서 런타임 에러가 발생하는데 이유를 알 수 있을까요? import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Main t = new Main(); Scanner in = new Scanner(System.in); int n = in.nextInt(); int[][] arr = new int[n][n]; // int[] arr2 = new int[n]; for (int i = 0 ; i < n; i++){ for (int j =0; j < n; j++) arr[i][j] = in.nextInt(); } // for (int i = 0 ; i < n; i++){ // arr2[i] = in.nextInt(); // } int test = t.solution11(n,arr); System.out.print(test); } // 11번 임시반장 private int solution11(int n, int[][] arr){ int answer = 0; int MAX = 0; for (int i =0; i < 5; i ++){ int cnt = 0; for (int j=0; j < n;j++){ int temp = arr[j][i]; for (int k =0; k <n; k++){ if (k == j) continue; else if (temp == arr[k][i]){ cnt++; } } if (cnt > MAX){ MAX = cnt; answer = j; } } } return answer; } }
-
해결됨코딩테스트 [ ALL IN ONE ]
공부 방법에 대해 질문이 있습니다.
처음에는 문제만 보고 1시간정도 고민해서 발상이 떠오르지 않았을 때만 발상 관련 강의를 보고, 그 다음에 또 1시간 동안 고민해서 발상을 코드로 옮기는 작업을 했는데도 테스트 케이스를 통과하지 못해서 마지못해 코드 구현 강의를 보았습니다. 그런데 이러한 bfs, dfs문제는 그냥 틀이므로 암기하라고 하셨을 때 허탈감이 들었습니다. 이러면 그냥 코테문제의 전형적인 틀이라고 받아들이고, 암기한 방법으로 다른 문제에 응용하면 되나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
히든퀘스트 3번 질문드립니다
https://www.acmicpc.net/step/16단계별풀기 16 단계 14번문제 제외 하고 다 풀기라고 써있는데 지금 단계별 풀기로는 dp가 23단계라 그리고 14번 문제 전깃줄은 6주차에 있는 문제라 풀어야되는거 같은데 다시 정정해주시면 감사드리겠습니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
균형이진트리 높이 관련해서 질문이 있습니다!
이런 트리가 있다면 높이가 3이 될텐데요.높이 공식을 적용해보면 log₂N - 1 을 해서 2.xxx 가 나오는 거 같은데 왜 다른걸까요? 혹시 이 트리가 균형이진트리가 아닐까요? 3번 노드가 6번 노드랑 깊이 차이가 2가 나서 균형이진트리가 아닐까요?그런데 선생님이 블로그에 예시로 보여주신 균형이진트리 모습에도 깊이가 2차이 나는 경우가 있긴 하더라구요...그래서 뭔가 이 이유는 아닌 거 같다는 생각이 들었습니다.개념이 좀 헷갈리네요ㅠ 균형이진트리가 맞다면 왜 높이 공식으로 구한 값이랑 실제 높이랑 다른건지 궁금합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
c++ 구조체 질문
#include<bits/stdc++.h> using namespace std; typedef long long ll; struct Node{ int num; vector<int> links; }; Node A[40]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int num = 2; for (int i = 0; i < 19; i++){ vector<int> v; v.push_back(i+1); A[i] = {num,v}; num+=2; } for (int i = 0; i < 19; i++){ cout << A[i].num << " "; } } #include<bits/stdc++.h> using namespace std; typedef long long ll; struct Node{ int num; vector<int> links; Node(int NUM,vector<int> LINKS) : num(NUM),links(LINKS){} }; Node A[20]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int num = 2; for (int i = 0; i < 19; i++){ vector<int> v; v.push_back(i+1); A[i] = Node(num,v); num+=2; } for (int i = 0; i < 19; i++){ cout << A[i].num << " "; } }첫번째 코드는 정상작동되는데, 두번째 코드는 error: no matching function for call to ‘Node::Node()’ 14 | Node A[20];이런 오류코드를 띄웁니다.두번째 코드에 이상이 없다고 생각하는데 왜 저런 오류가 나는지 궁금합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
최대 매출 코드 풀이랑 동일한 시간복잡도가 나오나요?
package slidingwindow; import java.util.Scanner; public class MaximumSales { static int solution(int n, int k, int[] arr) { int p1 = 1; int sum = 0; int max = 0; for(int i = 0; i < k; i++) { sum += arr[i]; } // 최초 값을 max에 대입 max = sum; // 최초 p[0] + p[1] + p[2] .... 값 제외 // p[1] + p[2] ... 부터 while(p1 < n-k+1) { sum = sum - arr[p1-1] + arr[p1+k-1] ; p1++; max = max > sum ? max : sum; } return max; } public static void main(String[] args) { 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(); } System.out.println(MaximumSales.solution(n, k, arr)); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
입출력 관련 전체적인 질문 있습니다!
어떤 문제는 cin + cout을 사용하시고 2-A번 문제는 scanf와 printf를 사용하셨는데 언제 무엇을 사용하시는지 그 기준이 궁금합니다! 감사합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-B 질문있습니다.
강사님의 로직이 잘 이해가 가지 않습니다.처음 문제를 풀 때 모든 블루레이를 사용해야 한다 고 생각해서 계속 오답이 나왔었는데요, 그 부분을 지우고 (cnt가 M과 같다는 조건문을 지우고) mid의 최소를 찾아 이분탐색 시켰더니 결국 통과는 했습니다. 그리고 강사님의 코드를 참고했는데, 동작방식이 잘 이해가 가지 않았습니다. 다음은 강사님 코드의 로직을 이해해보고 제 방식으로 수정해본 코드입니다.bool check(int mid) { if (mx > mid) return false; int temp = mid; int cnt = 0; for (int i = 0; i < n; i++) { if (mid - a[i] == 0) { ++cnt; mid = temp; continue; } else if (mid - a[i] < 0) { ++cnt; mid = temp; --i; } else mid -= a[i]; } if (mid != temp) cnt++; return cnt <= m; }else if (mid-a[i]<0) 의 조건문에서 i를 감소시켜서 다시 검사하게끔 하여 n+@의 순회를 합니다.강사님은 이 부분을 최적화 하셔서 기존 14행과 같은 코드를 만드신 것 같은데요, 제가 제대로 이해한건지 (질의1)제가 제대로 이해한게 맞다면, 처음부터 n회 순회만 하게끔 의도하셔서 코드를 작성하신건지 (처음 코드를 쓸 때부터 바로 저렇게 짜신건지) 아니면 최적화를 하다가 짜신건지 궁금합니다. (질의2)저런 발상 자체를 해본적이 없어서 굉장히 낯선 코드를 보는 기분이었네요..감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-J 풀이과정
덩어리=최소공배수? 이고ret = 35라는건 최소공배수가 7일때 7*5해서 최소공배수의 배수이고ret-1/a[i] 하는건 28 만드는 과정인건 알겠는데8:40 보면 ret%a[i]==0 있는 for문이 설명이 없고 잘 이해도 안가서 그러는 데 for(;;){if(ret%a[i]==0) if(temp==n))~ 이 부분 코드 설명 해 주실 수 있으신가요?공유 소스 보기 (acmicpc.net)