묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
[5강 재귀] 3번 상담 문제 질문드립니다.
안녕하세요, 강의 너무 잘 듣고 있습니다.5강 최적화 강의의 3번 상담이라는 문제를 푸는데, 제공해주신 답변과 제가 작성한 코드에 차이가 있어 질문드립니다. [모범답안]def recur(idx, result): global answer if idx > n: if idx > n+1: return answer = max(answer, result) return recur(idx + table[idx][0], result + table[idx][1]) recur(idx + 1, result) n = int(input()) table = [[] for _ in range(n+1)] for i in range(n): a, b = map(int, input().split()) table[i+1] = [a, b] # print(table) answer = 0 recur(1, 0) print(answer)[제가 작성한 코드]# 14501 import sys sys.stdin = open('/Desktop/dev/BackJoon/5강_최적화/3_상담.txt','r') input = sys.stdin.readline N = int(input()) arr = [list(map(int, input().split())) for _ in range(N)] def recur(idx, price): global ans if idx >= N: # 배열의 마지막 인덱스를 지나가는 것은 무시 return if idx == N-1: # 배열의 마지막 인덱스 ans = max(ans, price) return recur(idx+arr[idx][0], price+arr[idx][1]) recur(idx+1, price) ans = 0 recur(0,0) print(ans)모범답안과 종료조건이 다른 것을 확인했습니다.제가 생각했을 때, 배열의 마지막 인덱스 (N-1)에서도 하루 짜리 일을 할 수도 있기 때문에 recur를 한번 더 돌수 있고 그 다음 인덱스 N 시점에서 종료되어야 한다고 생각해서 코드를 작성했습니다.혹시 제가 잘못 생각하고 있는 부분이 있을까요? 또한, 제공해주신 답변은table을 N+1의 길이로 생성recur(1,0)로 시작하고 있는데 해당 문제는 꼭 이렇게 접근해야 되는 것인가요? 미리 감사드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강사님과 조금 다른방식으로 풀었는데 왜 틀릴까요??
저는 강사님과는 반대로배열을 1로 다 채운다음받은 정사각형 만큼 0으로 바꾸었는데요어디서 잘못되어서 문제가 풀리지않을까요? ㅠㅠ #include <bits/stdc++.h> using namespace std; #define y1 aaaa int adj[104][104], visited [104][104]; vector<int> v; int n,m,k,x,y,nx,ny,res,x1,x2,y1,y2; const int dy[] = {-1, 0, 1, 0}; const int dx[] = {0, 1, 0, -1}; int dfs(int y,int x){ visited[y][x]= 1; int cnt=1; for(int i=0;i<4;i++){ ny = y +dy[i]; nx = x +dx[i]; if(nx<0||ny<0||ny>=m||nx>=n)continue; if(visited[ny][nx]==0 && adj[ny][nx]==1){ cnt+=dfs(ny,nx); }else{ continue; } } return cnt; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> m >> n >> k; fill(&adj[0][0],&adj[0][0]+m*n,1); for(int i=0;i<k;i++){ cin >> x1 >> y1 >> x2 >>y2; for(int x = x1;x<x2;x++){ for(int y = y1; y<y2; y++){ adj[y][x]=0; } } } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(visited[i][j]==0 && adj[i][j]==1){ res++; v.push_back(dfs(i,j)); } } } sort(v.begin(),v.end()); cout << res << endl; for(auto z: v){ cout << z << endl; } return 0; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 16페이지
m2 맥북에어 사용자인데cd /Library/Developer/CommandLineTools/usr/include로 해서 들어가는 거까진 했는데여기서 mkdir bits를 하니 permission denied 가 떠서 접근권한 문제인거 같은데 어떤거를 변경해야 할 지 몰라서 질문합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
10. 마구간 정하기 [ 비슷하지만 다른 해답] 이래도 맞게 푼 걸까요??
채점사이트에서 출력은 "첫 줄에 가장 가까운 두 말의 최대 거리를 출력하세요." 라고 되어 있었습니다.제 생각대로라면 말들이 여러마리니까 가장 가까운 말들의 거리가 말들마다 다를수도 있겠다는 생각이 들어. 최대거리를 구하기 위해 코드를 조금 다르게 쳤습니다. 채점사이트에서는 정답처리 되었는데 확신이 안들어서 이 방식대로 풀어도 되는지 피드백주세요. 또한, 제가 한 방식과 원래 풀이가 어떤 차이가 있는지 궁금합니다.첨부1. 원래 풀이, 내가 생각한 풀이2. 문제 전체 소스코드 *강의 풀이 방식 count()public int count(int[]arr, int distance){ int ep=0, cnt=1; for(int i=1; i<arr.length; i++){ //배치가능 if(arr[i]-arr[ep] >= distance){ cnt++; ep=i; } } return cnt; }*내가 푼 방식 count()public int[] count(int[]arr, int distance){ int [] res = new int[2]; int ep=0, cnt=1; int min = Integer.MAX_VALUE; for(int i=1; i<arr.length; i++){ //배치가능 if(arr[i]-arr[ep] >= distance){ cnt++; min = Math.min(min,arr[i]-arr[ep]); // 말들의 최소거리 ep=i; } } res[0] = cnt; // distance로 배치되는 말의 수 res[1] = min; // 말들의 최소 거리 return res; }*강의 풀이 방식 solution()내부 이진탐색 while문while (lt<=rt){ int mid = (lt+rt) / 2; //mid최소거리만큼 배치했을때 m보다 더 배치할 수 있으므로 거리를 늘린다. if(count(arr,mid) >= m){ // mid : 말들의 최소거리 lt = mid+1; answer = mid; } else rt = mid-1; }*내가 푼 solution()내부 이진탐색 while문while (lt<=rt){ int mid = (lt+rt) / 2; int res[] = count(arr,mid); //mid최소거리만큼 배치했을때 m보다 더 배치할 수 있으므로 거리를 늘린다. if(res[0] >= m){ // mid : 말들의 최소거리 lt = mid+1; answer = res[1]; // answer = mid 가 아닌 count메소드에서 계산한 말들의 최소거리를 넣어준다. //(말들이 여러마리일때 가장 가까운말의 최대거리를 구하라고 문제에 명시되어있어서) } else rt = mid-1; } 전체 소스코드import java.util.*; public class Main { public int[] count(int[]arr, int distance){ int [] res = new int[2]; int ep=0, cnt=1; int min = Integer.MAX_VALUE; for(int i=1; i<arr.length; i++){ //배치가능 if(arr[i]-arr[ep] >= distance){ cnt++; min = Math.min(min,arr[i]-arr[ep]); // 말들의 최소거리 ep=i; } } res[0] = cnt; // distance로 배치되는 말의 수 res[1] = min; // 말들의 최소 거리 return res; } public int solution(int n ,int m, int[] arr){ int answer = 0; Arrays.sort(arr); int lt = 1; int rt = arr[n-1]-arr[0]; //arr[arr.length-1]로 끝내도 큰 차이 없음 while (lt<=rt){ int mid = (lt+rt) / 2; int res[] = count(arr,mid); //mid최소거리만큼 배치했을때 m보다 더 배치할 수 있으므로 거리를 늘린다. if(res[0] >= m){ // mid : 말들의 최소거리 lt = mid+1; answer = res[1]; // answer = mid 가 아닌 count메소드에서 계산한 말들의 최소거리를 넣어준다. //(말들이 여러마리일때 가장 가까운말의 최대거리를 구하라고 문제에 명시되어있어서) } else rt = mid-1; } return answer; } public static void main(String[] args) { Main M = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int m = kb.nextInt(); int [] arr = new int [n]; for(int i=0;i<n;i++)arr[i]= kb.nextInt(); System.out.print(M.solution(n,m,arr)); } }
-
해결됨코딩테스트 [ ALL IN ONE ]
강의를 다 듣고나서 문제는 어떤걸 푸는 것이 좋은가요?
문제를 풀 수 있는 대표적인 플랫폼을 뽑아보자면Leetcode프로그래머스백준이렇게 있는 것 같은데 강의를 다 듣고 기업 코테를 대비하기 위해서는 어떤 곳의 문제를 풀어보면 좋을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-B 질문있습니다.
http://boj.kr/28d3e04e1fe9450c8b2adb485cb92e0c위처럼 이진탐색을 재귀로 구현하여 풀었는데 지피티 + 지니 다 써도 어디에서 예외가 발생하여 틀리는지 모르겠습니다..강사님 어디가 틀린것이고 자신이 짠 코드가 어디가 잘못됬는지 잘 모르겠을 때 어떻게 분석할 수 있는지도 궁금합니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 반례 질문드립니다.
안녕하세요 선생님. 예제와 커뮤니티의 반례들은 모두 통과하는데, 백준 2%에서 오답으로 처리되어 질문드립니다.불이 시작되는 부분부터 BFS를 통해 표시를 해두고, J를 dfs로 움직이게 하는 로직으로 구현했습니다. http://boj.kr/8202d9f54d6b45e489a6888088d047e1
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
다음강의
언제나오나요? DP 강의 보고싶네여..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-K 문제는 반드시 역추적하는 방법으로만 풀 수 있나요?
이중 백터를 만들어서 수열을 저장하는 저장하는 방법을 사용했는데.. 정답은 잘 나오는 거 같은데 메모리 초과가 뜹니다 ㅠㅠ 이 코드를 개선하여 통과하기는 어려울까요?다른 풀이들도 보니 역추적 방법으로만 풀더라구요 시험이라고 생각하면, 역추적 아이디어를 번뜩 떠올리기는 힘들 수도 있다는 생각도 드네요.. #include <bits/stdc++.h> using namespace std; int N, tmp, cnt; vector<int> v; vector<vector<int>> answer(1000001); int binary_search(int num){ long low = 0, high = v.size() - 1; while(low <= high){ long mid = (low + high) / 2; if(v[mid] == num){ return mid; } else if(v[mid] >= num){ // 배열의 값이 더 크다. 줄여야 한다 high = mid - 1; } else{ // 배열의 값이 더 작다. 늘려야 한다 low = mid + 1; } } return low; // 배열보다 이상인 인덱스 리턴 } int main() { ios_base:: sync_with_stdio(false); cin.tie (NULL); cout.tie (NULL); cin >> N; for(int i = 0; i < N; i++){ cin >> tmp; if(v.empty()){ v.push_back(tmp); answer[0].push_back(tmp); continue; } if(v.back() < tmp){ v.push_back(tmp); cnt++; if(i > 0){ answer[cnt] = answer[cnt-1]; answer[cnt].push_back(tmp); } } else if(v.back() > tmp){ int idx = binary_search(tmp); v[idx] = tmp; if(idx > 0){ answer[idx] = answer[idx-1]; answer[idx].push_back(tmp); } else{ answer[0].clear(); answer[0].push_back(tmp); } } } cout << v.size() << "\n"; for(int i = 0; i < answer[v.size()-1].size(); i++){ cout << answer[v.size()-1][i] << " "; } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 숨바꼭질5 26번 라인 visited 값 할당 부분 질문 있습니다.
선생님 안녕하세요 !숨바꼭질 5번 26번 라인에 질문이 한 가지 있습니다. 기존에 올라온 질문들을 보면서 visited를 2차원 배열에 처리하여 홀/짝을 구분해야 한다는 것과 qSize를 활용하는 로직은 이해가 됐습니다. 그런데 26라인의 부분이 이해가 잘 되지 않습니다.visited[turn % 2][nx] = visited[(turn + 1) % 2][x] + 1; 왜 (turn+1)%2 + 1 을 기준으로 turn%2에 값을 할당하는지 잘 모르겠습니다.bfs 로직에서 visited[next]에 값을 할당 할 때 here을 기준으로 +1을 하여 next를 할당하는데 (turn+1)%2 + 1을 기준으로 할당한 것이 잘 이해가 안 됩니다. 항상 감사합니다.새해 복 많이 받으세요!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 메모리 초과가 나는 이유에 대하여 궁금합니다.
3-D Fire! 다음 코드 제출시 메모리 초과가납니다. 혼자 생각해봐도 고민이 해결되지않아 질문 올립니다. 코드:http://boj.kr/7b447402e3e04302bdc04ebb1e2c0105 좋은 강의 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-E 질문있습니다!
http://boj.kr/982be70c6d1e4cd5bfcbf7f36bf6d7c8 큰돌님 풀이만큼 구현하기엔 아직 실력이 부족한듯하여, 우선 부딪혀보았습니다. 풀어는 보고 싶어서, 정말 단순하게 4분할 후 배열 생성하고, 전수 검사하고, 서로 다른 요소가 있다면 다시 재귀를 돌리는 식으로 구현해보았는데 어떤 문제가 있는 걸까요 ㅠ??
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 공유 확인부탁드립니다.
안녕하세요:) 어제 오후 11~12시쯤 결제 후 신청 폼을 올렸는데 아직 공유가 안 되어 있습니다. kse011010@gmail.com 위의 이메일로 공유 부탁드렸는데 확인부탁드립니다‼
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-F 질문있습니다.
http://boj.kr/a301ab703f224734996c1f3bf87bf454 강의와 비슷한 원리로 슬라이딩 윈도우로 풀어봤습니다.간단한 것 같은데 어디서 반례가 발생하는 걸까요??도무지 해결이 되지 않아 질문 올립니다!
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 코드 어느 부분에서 틀렸을까요??
# 레벨, 일하는중(남은시간) def dfs(level, working_time): global max_value working_time -= 1 if level >= n: # 날짜가 지났는데 아직도 일을 하는경우 if working_time >= 1: return tmp = 0 for i in range(n): if checked[i] == 1: tmp += li_input[i][1] if tmp > max_value: max_value = tmp else: # 남은 일이 없어야 일 진행가능 if working_time < 1: # 일해야 되는 시간 만큼을 인자로 넘김 working_time = li_input[level][0] checked[level] = 1 dfs(level + 1, working_time) checked[level] = 0 dfs(level + 1, working_time) n = int(input()) li_input = [] for i in range(n): li_input.append(tuple(map(int, input().split()))) checked = [0] * (n) max_value = 0 dfs(0,0) print(max_value) 문제에 적혀있는 예제 빼고 다 틀리네요.'휴가(삼성 SW역량평가 기출문제 : DFS활용)' 해당 문제 풀었습니다.다른 답으로 쉽게 풀수 있긴한데 해당 코드가 왜 틀리게 나오는지는 모르겠네요.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
참조자 관련 질문 드립니다!
안녕하세요 선생님,선생님이 올려주신 정답 코드입니다. dfs에서 매개변수로 벡터에 참조자를 붙이셨는데, 참조자를 붙였을때와 붙지 않았을때의 차이, 그리고 왜 이 코드에서 참조자를 붙여야만 하는지를 알려주시면 감사하겠습니다. 좋은 강의 늘 감사드립니다!
-
미해결알고리즘 코딩테스트 문제풀이 with JAVA & 파이썬 (난이도 - 브론즈 3)
디버깅 관련 문제
안녕하세요 혹시 저는 디버깅 찍으면이렇게 뜨는데 선생님처럼 뜨게 해서 디버깅을 확인하고 싶은데 어떻게 해야하나요? ㅠ구글링을 해도 관련 자료를 찾기 힘드네요..
-
해결됨코딩테스트 [ ALL IN ONE ]
이제 모든 강의가 다 올라온 상태인가요??
이제 완강해도 되는지 궁금합니다~!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
메모리 초과 관련 질문 드립니다!
안녕하세요 선생님,http://boj.kr/2555600284cb48a2a7065e44862058b4 http://boj.kr/fdd2eb2834dd4f45a3f6f6c95feac99d 위가 메모리 초과가 발생한 코드, 아래가 통과한 코드입니다.해당 문제를 복습하기 위해 다음날 다시 코드를 짜봤는데, 메모리초과가 발생하여 통과된 코드와 비교해봤지만 두 코드 사이의 유의미한 차이를 찾지 못하여 무엇이 문제인지 잘 모르겠습니다. 또 메모리 초과는 어떤 환경에서 발생하며, 정확히 메모리 초과가 어떤 건지도 간략하게 설명해주시면 감사하겠습니다. 좋은 강의 늘 감사합니다.
-
미해결알고리즘 코딩테스트 문제풀이 with JAVA (난이도 - 브론즈 4,5)
Day 19, 18 순서가 반대에요
안녕하세요 수강생입니다 완강 덕분에 잘했습니다다름이 아니라 Day 18, 19 동영상 순서가 반대로 되어있어요 Day 18에 18번 문제 푸는 동영상은 맞지만 19번 항목과 18번 항목 자체 순서가 바껴있습니다. ps. 알고리즘 입문을 선생님 강의로 해서 만족스럽습니다 다음 B3 강의도 잘 듣겠습니다.