묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의 공부 순서
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 강사님 이번에 처음 구매했는데, 공부순서를 어떻게 하면 좋을까요 ? 교안을 먼저 보고 교안에 있는 내용들을 충분히 숙지한 후에 동영상강의를 듣는게 맞을까요? 그리고 저는 C를 어느정도 공부한 후 C++은 문법만 살짝 맛봤는데, 강의 내용이 처음부터 알고리즘에 관한 내용이 나와서 어려운 부분이 꽤 많습니다 ㅠㅠ 추천해주실만한 공부순서 있으면 부탁드립니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
트리 레벨 체크로는 안되는건가요??
예전 BFS 영상에서 최단 경로 길이를 구하기 위해서는 트리 레벨 체크를 활용하는 것을 보고 이번에도 큐 사이즈 만큼 반복을 돌아서 트리 레벨을 체크 하는 방식으로 구현하였는데프로그램에선 12로 잘 나오지만, 채점에선 오류가 떠서 이 방식으론 안되는지 궁금합니다.. 또, 강의를 들으면서 배열에 +1씩 추가하는 아이디어를 보고 기존의 배열에서 +1씩 해주어 수정한 결과는 통과하였는데, DIS배열을 하나 더 만든 이유도 궁금합니다! 추가로 젤 윗 이야기인 큐 사이즈 만큼 반복하여 레벨을 체크하는 상황과 배열에 +1씩 하여 넓혀가는 상황의 구별을 어떻게 할 수 있을지도 궁금해졌습니다... 감사합니다 import java.awt.*; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class In_8_11 { static int[][] matrix = new int[8][8]; static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0, 1, 0, -1}; static int level; public static int BFS(int x, int y) { Queue<Point> Q = new LinkedList<>(); // 가장 처음 큐에 넣기 Q.offer(new Point(x,y)); matrix[1][1] = 1; // 출발지점 꼭 걸어줘야함. // 시작 while( !Q.isEmpty()){ for (int j = 0; j < Q.size(); j++) { Point P = Q.poll(); System.out.println("( "+P.x + " , " + P.y+" )"); if (P.x == 7 && P.y == 7){ //return matrix[7][7] -1; return level; } for (int i = 0; i < 4; i++) { int nx = P.x + dx[i]; int ny = P.y + dy[i]; if (1 <= nx && nx <= 7 && 1 <= ny && ny <= 7) { if (matrix[nx][ny] == 0) { matrix[nx][ny] = 1; //matrix[nx][ny] = matrix[P.x][P.y] +1; // 뺄 필요 없을 거 같은데? Q.offer(new Point(nx, ny)); } } } }level++; } return -1; } public static void main(String args[]) { Scanner sc = new Scanner(System.in); for(int i = 1; i <= 7; i++){ for(int j = 1; j <= 7; j++) { matrix[i][j] = sc.nextInt(); } } System.out.println( BFS(1, 1) ); } }
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
냅색 12865 시간초과
심화>최적화(재귀, 백트래킹의 경우의 수) 강의 4번문제를 풀었는데, 백준에 제출하면 계속 시간초과가 뜨네요..!import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline n, k = map(int, input().split()) stuff = [list(map(int, input().split())) for _ in range(n)] value = 0 def recur(idx, tw, tv): global value if tw > k: # 무게 초과 return if idx == n: value = max(value, tv) return recur(idx+1, tw+stuff[idx][0], tv+stuff[idx][1]) recur(idx+1, tw, tv) recur(0, 0, 0) print(value)수업자료를 참고하고 싶은데, mp4로 올라와있어서 질문 남깁니다.시간초과를 어떻게 하면 피할 수 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-S 시간초과 질문드립니다 !!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강사님강의 잘 듣고 잇습니다.강평 별5개 드렸습니다 항상 감사합니다 ^^강의도 들어보았고, 제가 작성한 코드와 로직은 같은 것이라고 저는 생각하는데.. 제출시 시간초과가 떠서요.. 무엇이 잘못됫는지 여쭙고 싶습니다.감사합니다. #include <bits/stdc++.h> using namespace std; string S; bool DP[2505][2505]; // 시작과 끝에 대한 팰린드롬 문자열의 길이 int DP2[2505]; #define INF 987654321 bool go(pair<int, int> Q){ if (Q.first >= Q.second){ return true; } bool& ret = DP[Q.first][Q.second]; if(ret) return ret; if (S[Q.first] == S[Q.second]){ ret = go({Q.first+1, Q.second-1}); } return ret; } int go2(int here){ if(here >= S.size()) return 0; int &ret = DP2[here]; if(ret != INF) return ret; for(int i = here; i < S.size(); ++i){ if (DP[here][i]){ ret = min(ret, go2(i+1)+1); } } return ret; } int main(){ cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false); cin >> S; for(int i =0 ; i < S.size(); ++i){ DP[i][i] = 1; for(int j = i+1; j < S.size(); ++j){ go({i,j}); } } fill(DP2, DP2+2505, INF); cout << go2(0); return 0; }
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
섹션4 자료 자체와 정렬된 인덱스 분리 내용 질문
안녕하십니까? 강사님!초보자의 문득 드는 생각으로 질문드립니다. "섹션4 자료 자체와 정렬된 인덱스 분리" 강의의 MakeIndexAge함수 내용중에 USERDATA** aList;aList = malloc(sizeof(USERDATA*) * GetListCount());memset(aList, 0, sizeof(USERDATA*) * GetListCount()); 위의 코드를 그냥 이렇게 작성하면 안될까요?USERDATA** aList[GetListCount()]={0};잘몰라서 드리는 질문입니다.이해해 주시길 바랍니다수고하십시오
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
바텀업 DP 배낭 관련해서 질문 드립니다.
안녕하세요 선생님. 강의 잘 보고 있습니다.다름이 아니라 배낭 문제 바텀업DP가 이해가 안가서 질문남깁니다. 지금까지 DP 설명하실때는 모두 끝에서 부터 얘기를 해주셔서 퇴사 문제에서는 뒤에서부터 앞으로 오는식은 이해가 갔는데 배낭은 왜 앞에서부터 시작을 해야하는지 이해가 잘 안가서 질문 남깁니다. 배낭도 뒤에서 앞으로 오는 식으로 풀 수 있을까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 공유 부탁드립니다!
(질문이 해결되어 내용 삭제합니다! 감사합니다)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 메모리초과 질문있습니다
#include <bits/stdc++.h> using namespace std; int R, C, fire_visitied[1000][1000]={0,}, jihoon_visitied[1000][1000]={0,}; int dy[4]={-1,0,1,0}, dx[4]={0,1,0,-1}; char arr[1000][1000]={0,}; pair<int,int> jihoon, fire; vector<pair<int,int>> fire_v; void fire_bfs(int y, int x){ queue<pair<int,int>> que; fire_visitied[y][x]=1; que.push({y,x}); while(que.size()){ pair<int,int> temp=que.front(); que.pop(); for (int i=0;i<4;i++){ int ny=temp.first+dy[i]; int nx=temp.second+dx[i]; if (ny<0||nx<0||ny>=R||nx>=C) continue; if (arr[ny][nx]=='#'||(fire_visitied[ny][nx]&&(fire_visitied[ny][nx]<fire_visitied[temp.first][temp.second]+1))) continue; fire_visitied[ny][nx]=fire_visitied[temp.first][temp.second]+1; que.push({ny,nx}); } } } int jihoon_bfs(int y, int x){ queue<pair<int,int>> que; jihoon_visitied[y][x]=1; que.push({y,x}); while(que.size()){ pair<int,int> temp=que.front(); que.pop(); for (int i=0;i<4;i++){ int ny=temp.first+dy[i]; int nx=temp.second+dx[i]; if (ny<0||nx<0||ny>=R||nx>=C) return jihoon_visitied[temp.first][temp.second]; if (jihoon_visitied[ny][nx]||arr[ny][nx]=='#') continue; if (jihoon_visitied[temp.first][temp.second]+1>=fire_visitied[ny][nx]) continue; jihoon_visitied[ny][nx]=jihoon_visitied[temp.first][temp.second]+1; que.push({ny,nx}); } } return 0; } int main() { cin >> R >> C; for (int i=0;i<R;i++){ for (int j=0;j<C;j++){ cin >> arr[i][j]; if (arr[i][j]=='J') jihoon={i,j}; if (arr[i][j]=='F') fire_v.push_back({i,j}); } } if (!fire_v.size()) fill(&fire_visitied[0][0],&fire_visitied[0][0]+1000*1000,INT_MAX); for (auto i:fire_v) fire_bfs(i.first,i.second); int answer=jihoon_bfs(jihoon.first,jihoon.second); if (answer) cout << answer; else cout << "IMPOSSIBLE"; }위 코드에서 메모리 초과가 납니다. 초기의 모든 불의 위치를 큐에 담아서 bfs 를 하는 것을 생각하지 못해 모든 불을 돌면서 bfs를 하도록 코딩했습니다. if (arr[ny][nx]=='#'||(fire_visitied[ny][nx]&&(fire_visitied[ny][nx]<fire_visitied[temp.first][temp.second]+1))) continue;이 라인을 통해서 fire 배열의 중복을 막은 것 같은데 왜 메모리초과가 나는지 모르겠습니다. 알려주시면 감사하겠습니다 ㅠ
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 최적화 36:18분 부터 설명해주시는 개념에 관하여
설명해주신 개념 정리해봤는데 제가 잘 못 이해한 부분있는지 피드백 받고자 올려봅니다~!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7 - C 질문
dfs 방식으로 풀었는데 메모리초과가 발생해 질문드립니다.재귀함수이다보니 함수호출이 잦아 발생하는거 같은데,해당 위치에서, 해당 위치에 도달하는 경로 중 가장 많이 이동한 경로만을 탐색하는 방식으로 진행했음에도 불구하고 메모리초과가 발생하다보니 어디가 문제인지 모르겠어서 질문드립니다 ㅜㅜ... #include <bits/stdc++.h> using namespace std; enum { E, S, W, N, }; // moves : 해당 위치에 도착했을 때, 지금까지 내가 몇번 움직였는지를 저장한다. int table[51][51], moves[51][51]; int n, m; int dy[4] = {0,1,0,-1}, dx[4] = {1,0,-1,0}; // dfs, 이동 가능한 방향으로 이동하는 함수 void go(int fy, int fx, int y, int x, int cnt) { // 움직인 횟수 저장 moves[y][x] = cnt; for(int i = E; i < N; i++) { int ny = y + dy[i]*table[y][x], nx = x + dx[i]*table[y][x]; // 최대 횟수로 이동한 경로만 통과 가능 if(ny < 0 || nx < 0 || ny >= n || nx >= m || table[ny][nx] == 0 || cnt + 1 < moves[ny][nx]) continue; // 무한 루프에 빠지게 될 경우, 탈출 if(fy == ny && fx == nx) { exit(0); } go(y, x, ny,nx, cnt + 1); } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m; for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { char tmp; cin >> tmp; if(tmp == 'H') { tmp = '0'; } table[i][j] = tmp - '0'; } } go(0,0,0,0,1); cout << *max_element(moves[0], moves[0] + 51*51); return 0; }
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
심화 탭 > 최적화 수업
수업 자료가 mp4로 들어가 있는것 같습니다 🙂 혹시 의도하신게 아니라면 수정이 필요할거 같아요 !
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
오큰수 질문
안녕하세요 큰돌님 강의 잘 듣고 있습니다 혹시 오큰수 문제가 2주차 그래프이론, DFS, BFS에 분류된 이유가 뭘까요?? 풀이 방법은 스택인데 그래프에 분류된 이유가 궁금합니다 :)
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
전투게임
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.자바로 작성했는데, 시간 초과가 납니다. 어느 부분이 잘 못 작성한건지 궁금합니다. import java.io.*; import java.util.*; class Node implements Comparable<Node>{ int idx; char team; int power; Node(int idx, char team, int power){ this.idx = idx; this.team =team; this.power = power; } @Override public int compareTo(Node o) { return this.power - o.power; } } public class Main { public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); int n=sc.nextInt(); int[] answer = new int[n+1]; ArrayList<Node> list = new ArrayList<>(); for(int i=1; i<=n; i++) { char a = sc.next().charAt(0); int b=sc.nextInt(); list.add(new Node(i,a,b)); } Collections.sort(list); //정렬 HashMap<Character, Integer> map = new HashMap<>(); int j=0,total=0; for(int i=1; i<n; i++) { for(;j<n; j++) { if(list.get(j).power<list.get(i).power) { total+=list.get(j).power; //쫓아오는 학생의 파워를 누적합 char x =list.get(j).team; //쫓아오는 학생의 팀을 표시 map.put(x, map.getOrDefault(x, 0)+list.get(j).power); //해싱해준다. } else break; } answer[list.get(i).idx] = total - map.getOrDefault(list.get(i).team, 0); //전체 누적합에서 자신의 팀이 있다면 그 점수는 빼준다. } for(int i=1; i<=n; i++) System.out.println(answer[i]); } }
-
미해결코딩테스트 [ ALL IN ONE ]
디스코드 초대장이 올바르지 않다고 뜹니다
안녕하세요! 코딩테스트 All In One 강의 수강중인 취준생입니다.다름이 아니라, 디스코드 채널에 합류하기 위해 다른 글의 초대장 링크를 눌러봤지만, 올바르지 않은 초대장이라고 뜹니다ㅜㅜ혹시 새로운 디스코드 초대 링크를 받을 수 있을까요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-H 2559번 질문있습니다!
안녕하세요 선생님 😃 누적합 관련해서 질문있습니다. 아래 글은 이전에 누적합 관련해서 이러한 로직을 사용하는 것은 어떤지 질문을 드렸던 글입니다.https://www.inflearn.com/questions/1233619/1%EC%A3%BC%EC%B0%A8-%EA%B0%9C%EB%85%90-9-%EB%88%84%EC%A0%81%ED%95%A9-%EC%A7%88%EB%AC%B8%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4 위의 로직을 사용해서도 문제를 풀어봤는데요, 테스트 케이스에서는 정답이었지만, 백준에 제출했을 때는 오답처리가 되어 무엇이 잘못된 것인지 잘 모르겠어서 질문드립니다. http://boj.kr/e912454a40e7424d98eccf86d7506db2
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 9996번 재질문입니다!
안녕하세요 선생님 :) 선생님께서 푸신 풀이에서 하나를 입력하면 그에 대한 출력이 바로 나오는 것이 마음에 들지 않아서 모든 입력을 넣어야 출력이 나오도록 코드를 변경해보려고 했습니다. vector 컨테이너를 사용해서 입력된 문자열들을 컨테이너에 담고, 인덱스에 알맞는 문자열을 꺼내와서 DA인지 NE인지 출력해보려고 했는데요, 자꾸 vector out of range 에러가 나옵니다. 왜 범위를 벗어난건지 모르겠어서 질문드립니다 ㅠㅠ http://boj.kr/bc2da3a3773c401086b47cf818e8c0f1
-
미해결코딩테스트 실전 모의고사(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); int[] dx = {0,0,1,-1}; int[] dy = {1,-1,0,0}; Queue<int[]> q = new LinkedList<>(); int n=sc.nextInt(); int m=sc.nextInt(); int[][] map = new int[m][n]; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { map[i][j]=sc.nextInt(); } } boolean[][] visit = new boolean[m][n]; int[][] dist = new int[m][n]; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(map[i][j]==2 || map[i][j]==3) { q.add(new int[] {i,j}); int L=0; visit = new boolean[m][n]; visit[i][j]=true; while(!q.isEmpty()) { int len = q.size(); L++; for(int k=0; k<len; k++) { int[] tmp = q.poll(); for(int z =0; z<4; z++) { int nx = tmp[0]+dx[z]; int ny = tmp[1]+dy[z]; if(nx>=0 && ny>=0&& nx<m && ny<n && map[nx][ny]!=1) { if(!visit[nx][ny]) { visit[nx][ny]=true; dist[nx][ny]+=L; q.add(new int[] {nx,ny}); } } } } } } } } int answer=Integer.MAX_VALUE; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(map[i][j]==4 && dist[i][j]>0) { answer = Math.min(answer, dist[i][j]); } } } System.out.print(answer); } }
-
미해결코딩테스트 실전 모의고사(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); int n=sc.nextInt(); int[] num = new int[n+1]; int[] st = new int[n+1]; for(int i=1; i<=n; i++)num[i]=sc.nextInt(); int k=sc.nextInt(); for(int i=1; i<=n; i++) st[i] = num[i]; Arrays.sort(st); int rest=num.length; //처리해야 할 작업 개수 for(int i=1; i<st.length; i++) { long time=((long) rest * (st[i] - st[i-1])); //몇번의 회전에 해당 작업이 끝나는가 if(time>k) { long idx= k%rest; //어디서 멈춰야하는지 구하는 변수 int cnt=0; for(int j=0; j<num.length; j++) { if(num[j]>=st[i]) { if(cnt==idx) { System.out.print(j); System.exit(0); } cnt++; } } } else { k-=time; rest--; } } System.out.print(-1); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H 질문있습니다.
선생님과 비슷하게는 풀었는데 70%쯤 가서 오답이라고 뜹니다.어디가 틀린건지 도저히 모르겠습니다https://www.acmicpc.net/source/77016787
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 20:28초에서 설명하고 있는 최적화 방법에 관하여
강사님! 20 팩토리얼에 2가 몇 번 곱해져있는지 설명해주시는 부분에서 질문이 있습니다. 마지막에 20을 2의 제곱수로 나눴을 때 몫의 정수 부분 합이 2가 몇 번 곱해져 있는지 나타내는 수라고 알려주셨는데요. 이게 어떤 원리인지 궁금합니다. 그러니까 수학적으로 왜 이렇게 같을 수 있는지 알고싶어요!