묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨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가 몇 번 곱해져 있는지 나타내는 수라고 알려주셨는데요. 이게 어떤 원리인지 궁금합니다. 그러니까 수학적으로 왜 이렇게 같을 수 있는지 알고싶어요!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8주차 개념강의 영화수집 질문드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.선생님 안녕하세요 우선http://boj.kr/e25eb9ed4cf34c26bf2c12eff66b4e22강의를 들으면서 나름대로 짜봤더니 시간초과가 나는데 선생님의 코드로 main 부분을 바꾸면 시간초과가 안나는 이유가 궁금합니다! 부족한 지식에 해답을 주시면 감사하겠습니다 ㅠㅠ
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
11653번 (2강 최적화) 질문이있습니다.
아래와 같이 완전탐색(?)을 이용해 작성하였는데요, 말씀하신 최적화 방법(약수를 구할때는 해당 수의 제곱근까지만 구해도 약수의 개수와 약수를 구할 수 있다)으로 어떻게 코드를 최적화 할 수 있을지 잘 모르겠습니다. let input = readLine().map { Int($0)! }! var answer: [Int] = [] var previous = input func check(i: Int, divided: Int) -> Bool { if divided % i == .zero { answer.append(i) previous = divided / i return true } else { return false } } if input == 1 { } else { for i in 2...(input) { var flag = true repeat { let check = check(i: i, divided: previous) flag = check } while flag } answer.compactMap { print(String($0)) } }
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
아나그램 사이즈 관련 질문입니다.
만약 아나그램 b 가 bbb 라면?해쉬맵의 사이즈가 0이 되서 아나그램 비교자체가 안되지 않을까라는.. 의문이 들어서 질문드립니다 ~
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-A 질문있습니다!
큰돌님 코드중에 int& ret = dp[here][visited]; if(ret != -1) return ret;이 부분이 결국 메모이제이션으로 해석되었는데요. 강의중 {a,b,c} -> d 로 가려고 할때{a,b,c}의 순서는 상관없다고 말씀해주신게ret = min(ret, tst(i, visited | (1<<i)) + dist[here][i])이 부분을 거치면서 {a,b,c} -> d로 가기 전 이미 최소 경로로 갱신된 상태이기 때문인가요? 즉, 실제로 a->b->c->d와 b->c->a->d의 경로비용은 다르지만 위의 코드로 인해서 이미 최소비용 경로로 {a,b,c} 가 끝난 상황. 이라고 해석하면 될까요?
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
숨겨진 합 자바 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.문자를 a로 치환하고 숫자만 뽑으려고 하는데 a의 개수가 달라서 에러가 뜹니다. 방법이 없을까요?? 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(); String str = s.replaceAll("[^0-9]","a"); //a로 치환 int answer= 0; System.out.print(str); } }