묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨코딩테스트 [ ALL IN ONE ]
다익스트라 final 노드 도착후에 바로 종료하지 않는 이유가 궁금합니다.
구현하신 코드를 보니 목적지에 도착한 이후에도 우선순위 큐를 모두 비우고 나서 값을 리턴하도록 함수를 작성하셨는데요, 목적지 도달 후 바로 반환 하는 것이 시간상 더 유리할 것 같은데 혹시 다른 이유가 있는걸까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-C 인구 이동 질문 있습니다
안녕하세요 큰돌님, 아래는 제가 강의 보고 코드를 그대로 구현했는데, 백준에 통과를 못하는 이유를 알 수 있을까요? ㅜㅜ 아무리 찾아보고 디버깅 해봐도 예제 문제 4,5번에 오답이 뜹니다.https://www.acmicpc.net/source/67562965그리고 추가 질문 있습니다.. 이전 강사님 영상에는 dfs 하실때 보통 dfs 함수내에 visited을 정의를 하셨는데, 이번 영상에는 dfs 에 visited를 정의를 안하신 이유도 궁금합니다, 혹시 이전 영상들처럼 dfs에 visited[y][x] = 1 걸어도 문제 풀이가 가능한지 여쭤드리고 싶습니다, 그리고 이번 영상에 다르게 하신 점도 이유도 알고 싶습니다 ㅎㅎ미리 감사합니다!
-
해결됨SQL 코딩테스트를 위한 첫 걸음
문제 주소 링크
안녕하세요 각 강의에 관한 문제가 링크가 따로 있었던거 같은데 없어진거 같아서 문의드리게 되었습니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 왜 틀렸을까요?
알려주시면 감사드립니다 ㅠㅠhttp://boj.kr/55889bf2310f490a82888d282c975425
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R visited 안써도 괜찮나요 재 방문이 없나요
단 방향이라 그런가요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-Q 치즈가 없는 경우는 고려하지 않나요?
뭔가 없을 수 도 있는 경우 무조건 있는 경우 구분 하기 어렵네요 한국말이 저번에 안전 지역 문제는 d=0인 비가 오지 않는 경우도 고려해야 하던데 3-D는 무조건 불이 있는 거 같은데 없는 경우도 고려하라고 해서 네... 잘 모르겠어요 문제가 뭐가 뭔지
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
12865 배낭문제
안녕하세요! 제 6강을 수강하고 탑다운 DP 문제 중 냅색문제를 백준에서 풀었을 때 계속 런타임에러가 나네요 ㅠ 혹시 이유를 알 수 있을까요 ? 제가 작성한 코드는 다음과 같습니다. #물건의 수 n와 배낭의 무게 k n,k = map(int,input().split()) #순서대로 배낭의 무게 w와 가치 v item = [list(map(int,input().split())) for _ in range(n)] dp = [[-1 for _ in range(10*6)] for _ in range(n)] #모든 경우의 수 생각하기 def bag(idx , weight ) : if weight > k : return -999 if idx == n : return 0 if dp[idx][weight] != -1 : return dp[idx][weight] #물건을 넣은 경우와 넣지 않은 경우를 비교해준다 dp[idx][weight] = max( bag(idx+1 , weight + item[idx][0]) + item[idx][1] , bag(idx+1 , weight)) return dp[idx][weight] ans = bag(0,0) ans
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
12865
def recur(idx, weight): if weight > K : return -99999 if idx == N : return 0 if dp[idx][weight] != -1: return dp[idx][weight] dp[idx][weight] = max(recur(idx + 1, weight + items[idx][0]) + items[idx][1], recur(idx + 1, weight)) return dp[idx][weight] N,K = map(int,input().split()) items = [list(map(int,input().split())) for _ in range(N)] #무게를 고려해서 가치를 담는 dp테이블, 무게는 얼마든지 커질 수 있으므로 10만, 그리고 물건개수만큼 N 작성 dp = [[-1 for _ in range(100_001)] for _ in range(N)] print(recur(0,0))recur(0,0) 재귀함수를 불렀는데 dp 테이블의 최대값이 찍히는게 잘 이해되지 않습니당...!당연히 dp테이블에서 max값을 찾아 출력해야 하는 줄 알았는데, 코드를 보니 그냥 print(recur(0,0))을 하네욥..!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-K 연결 되지 않아도 그래프로 쳐서
정점 5개 간선 4개1-2 3-4-5-3 이런 경우에도 그래프라서 V=E-1만 생각하면 안 되는거죠?
-
미해결코테 출제자가 알려주는 [코딩 테스트 with 파이썬]
선생님!
선생님 안녕하세요!이 강의를 결제하여 들은건 너무 잘한 일 같습니다!차근차근 한 부분도 놓치지 않고 천천히 설명해주셔서 감사해요현재 그리디 파트까지 마무리 했는데 너무 만족스러워요그래서 드리는 말씀인데 혹시 다른 자료구조나 알고리즘 (BFS, DFS, DP 등등) 을 사용한 PS 풀이 2탄 강의를 만드실 생각은 없으신가요!!?감사합니다
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
2_11 임시반장정하기 질문있습니다.
if (arr[i][k] == arr[j][k])라는 조건이 본인과 본인일 때도 카운터가 되기 때문에 (정답에는 지장이 없지만)if (i != j && arr[i][k] == arr[j][k]) i 와 j 가 다를 때만 카운트 하게 조건을 추가해줬는데 오답입니다가 뜹니다.다른 사람일 때만 같은 반인지 확인하면 되는 줄 알았는데 왜 안되는지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-O 질문드립니다
http://boj.kr/34af1033b33c4392a7ea90529d920901while(scanf("%d", &n) != EOF) 로 코드를 만들었을땐한참 exe 파일을 찾을 수 없다고 나오다가while(cin >> n)로 변경하니까 정상 작동 되는데어떤게 문제였을까요?질문글 읽어주셔서 감사합니다!
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
완전탐색 문제 유형은 DFS로 푸는 것만 있나요?
안녕하세요, 해당 강의에서 풀어주는 완전탐색 문제는 DFS 방식으로 푸는 법만 있나요?프로그래머스 등과 같은 곳에서 완전탐색 유형 문제를 풀어보니, DFS 방식으로만 푸는 것은 아닌듯 하여 질문 드려요!
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
재귀 경우의수 14501 퇴사문제
def recur(idx,money): global answer if idx == n: answer = max(answer, money) return if idx > n: return # idx 해당날에 상담 ㄱㄱ recur(idx + arr[idx][0], money + arr[idx][1]) # pass 하는날 recur(idx + 1, money) n = int(input()) arr = [[] for _ in range(n+1)] for i in range(n): t,p = map(int,input().split()) arr[i+1] = [t,p] answer = -999999 recur(1,0) print(answer)위는 제 코드입니다. 이 코드를 백준에 제출하면 오답이 나옵니다. 테스트 케이스의 경우에는 맞았는데.근데 위 코드에서 if에 해당하는 부분을 아래와 같이 고치면 정답이 나오더라고요.if idx == n+1: answer = max(answer, money) return if idx > n+1: return제가 아직 재귀에 대한 완벽한 이해가 없고, 어떤 식으로 재귀함수가 동작하는 지는 정확히 몰라서 구글링을 통해 재귀 함수는 스택방식으로 작용한다라는 내용도 공부해보고 왜 n+1은 통과고 n은 실패인지 암만 생각해봐도 모르겠네요,,도와주십시오!!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-Q go함수 마지막에
if(y==0&&x==m-1){ if(k==visited[y][x])return 1; return 0; }이렇게 되는데if(k==visited[y][x]){if(y==0&&x==m-1)}이렇게 해도 결과 같던데 이런 관점은 안 좋나요? 상관없나요?그리고 y==0&&x==m-1&&k==visited[y][x]이렇게 하면 왜 결과가 0으로 나올까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-P 풀면서
시작부터 3개 고르는 데에서 막혔는데vector<pair<int,int>>v 만들어서 i,j,k3개 고르는 연구소 문제 처럼 하려다 안돼서 포기하고visited[]=1;go();visited[]=0; 이런 것 만 봐서 visited[]=1이랑 go를 합치는건 생각도 못했는데문제가 다양한 만큼 틀을 배우지만 틀에 얽매이지 않는 이 모순 정말 자유롭게? 다양하게? 생각해야 알고리즘 풀 수 있네요...먼저 풀이 논리?를 적고 디테일 하게 함수를 채워야 되나봐요
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
투포인터 22988번 문제에서 continue와 break이 들어가는 이유
N, X = map(int,input().split()) arr = sorted(list(map(int,input().split()))) s = 0 e = N-1 remain = 0 cnt = 0 while s <= e : # s와 e가 교차되면 멈춘다! if arr[e] == X: cnt += 1 e -= 1 continue if s == e : remain += 1 break # 짜투리를 하나 추가한다! if arr[e] + arr[s] >= X/2: cnt +=1 s += 1 e -= 1 else: s += 1 # 수가 커지겠죠! remain += 1 print(cnt + remain//3 )여기에서 while문 안에 첫 번째 if 다음에 continue가 들어가는 이유와두 번째 if 문에서 break을 사용하는 이유를 모르겠습니다. 두 개 다 없어도 가능하다고 생각하는데 테스트 케이스의 경우 continue는 없어도 예제 출력을 출력했고, break은 없으면 예제출력과 결과가 다르네요!!continue와 break이 어떻게 쓰인 것인지 조금 자세히 설명해주실 수 있으실까요
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
완전탐색 1090번 시간초과
예제 문제는 잘 풀리는데 백준에 제출하니까 시간초과가 뜹니다강의 자료랑 큰 차이는 없어 보이는데 어느 부분을 고쳐야 시간 안에 계산 가능할까요?#include <iostream> #include <cstdlib> using namespace std; int main(int argc, char **argv) { int n; int minX, minY, maxX, maxY; cin >> n; int arr[n][2]; for(int i=0; i<n; i++){ cin >> arr[i][0] >> arr[i][1]; } minX = arr[0][0]; maxX = arr[0][0]; minY = arr[0][1]; maxY = arr[0][1]; for(int i=1; i<n; i++){ if(arr[i][0]>maxX){ maxX = arr[i][0]; } else if(arr[i][0]<minX){ minX = arr[i][0]; } if(arr[i][1]>maxY){ maxY = arr[i][1]; } else if(arr[i][1]<minY){ minY = arr[i][1]; } } int arr_answer[n]; int arr_dis[n]; for(int i=minY; i<=maxY; i++){ for(int j=minX; j<= maxX; j++){ for(int l=0; l<n; l++){ int subY= 0, subX=0; subY = i-arr[l][1]; subX = j-arr[l][0]; arr_dis[l] = abs(subX) + abs(subY); } int sum = 0; for(int k=0; k<n; k++){ sum+=arr_dis[k]; if(i==minY && j ==minX){ arr_answer[k] =sum; } else if(sum < arr_answer[k]){ arr_answer[k] = sum; } } } } for(int i=0; i<n; i++){ cout << arr_answer[i] << " "; } return 0; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-M아이디어가 있어도 코드로 구현하기가 어려운데
구현문제를 풀어야 하나요? 맨날 답지 봐야 돼서 특히 재귀 함수 써야 할때는 ㅠㅠ dp도 그래서 너무 어려워요
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
바닥 장식 (백준 1388) 문제 질문입니당
저는 맵2차원배열을 boolean으로 사용하고싶어아래와 같이 코드를 작성해봤습니당... 예제입력1. 은 답이 잘나오는데 나머지는 왜 틀리게 나올까용... package DFS; import java.io.*; import java.util.StringTokenizer; import java.util.Vector; /* 바닥 장식 https://www.acmicpc.net/problem/1388 */ public class B1388 { final static int MAX =50+10; static boolean [][] map; static boolean [][] visited; static int M,N; static void dfs(int y, int x){ visited[y][x]=true; if (map[y][x]==true&& map[y][x+1]==true){ dfs(y, x + 1); } if(map[y][x]==false&&map[y+1][x]==false){ dfs(y+1,x ); } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); map = new boolean[MAX][MAX]; visited = new boolean[MAX][MAX]; //맵정보 반영 for (int i = 1; i <= N; i++) { String str = br.readLine(); for (int j = 1; j <= M; j++) { map[i][j] = (str.charAt(j - 1) == '-' ? true : false); } } //dfs int answer=0; for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { if(map[i][j]&&visited[i][j]==false){ dfs(i,j); answer++; } } } bw.write(String.valueOf(answer)); bw.flush(); bw.close(); } }