- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이 강의를 먼저 듣는게 좋을까요? 아니면 강사님의 CS강의를 먼저 듣는게 좋을까요? 아직 강의 극초반이라 여쭤봅니다.
안녕하세요, 늘 좋은 강의 감사드립니다. 다름이 아니라 해당 문제를 풀면서 go(idx, sum) 함수의 초기값을 어떻게 보내는지에 따라 오답처리가 되어 문의드립니다. 제가 처음 짠 코드는 다음과 같습니다. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int INF = 987654321; ll dp[104][24]; int arr[104]; int n; int target; ll go(int idx, int sum){ if(idx==n-1){ if(sum==arr[idx])return 1; else return 0; } ll &ret = dp[idx][sum]; if(ret!=-1) return ret; ret = 0; if(sum+arr[idx] <=20){ ret += go(idx+1, sum+arr[idx]); } if(sum-arr[idx]>=0){ ret += go(idx+1, sum-arr[idx]); } return ret; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); memset(dp, -1, sizeof(dp)); cin >> n; for(int i=0; i<n; i++){ cin >> arr[i]; } target = arr[n-1]; cout << go(0,0) << '\n'; return 0; } 위와 같이 go(0,0)으로 한 경우 오답처리가 되었습니다. 반면 go(1, arr[0])로 시작한 경우 정답처리가 됩니다. 제가 생각하기에 go 함수 내 조건문에 따라 음수값은 처리하여 go(1, arr[0])와 차이가 없다고 생각했는데 어디서 문제인거지 알 수 있을까요?
어느 파트인지 섹션 5 - 그래프 순회 (DFS & BFS) 내가 이해한 내용 DFS와 BFS 모두 모든 노드를 탐색하고, 시간 복잡도도 같다고 이해했습니다. 궁금한 점 DFS로만 풀리고 BFS로 안풀리는 문제도 있나요? BFS로 DFS문제가 다 풀리면, 왜 강사님은 DFS로 먼저 접근하시는건가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 질문 1. n의 범위가 30을 넘지 않고 조합문제라면, 비트마스킹이라고 가정하고 풀어도 될까요? 아니면, 문제마다 생각하는게 좋을까요? 질문 2. 매개변수 설명해주시는 부분에서 for(int i=1; i<n; i++){ go(1 | (1<<i)); } 위 부분은 0번째 인덱스인 사과가 1인경우. 즉, 사과를 포함하는 모든 경우의 수이잖아요. 여기서 사과를 포함하는 경우만 보는게 아니라 완탐을 하고싶다면, 굳이 함수 매개변수로 비트연산을 전달 안 하고 그냥 비트마스킹을 하면 되는거죠?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 좋은 강의 개설해 주셔서 감사합니다! 마지막 class에서 () 내부에 Int = 20이라고 설정하시고 main 함수에서 출력할 때 그냥 이름만 넣어줘도 자동으로 20이 나왔는데 이 원리가 어떤 건지 궁금합니다 : Int를 넣어주면 Int를 출력값으로 받겠다는 의미 아닌가요?
http://boj.kr/e469d016f48d45fdba8b5dc64066e87c 문제풀이 로직은 다음과 같습니다. 1. 수빈이가 짝수 시간에는 0번 s_visited에 홀수시간에 도달한 장소는 1번 s_visited에 저장을 합니다. 동생이 이동하면서 수빈이와 같은 시간에 정확히 도착하거나 2만큼 차이가 난다면 바로 출력하게끔했는데 17 5 입력이 자꾸 4가 아닌 6이 나오더라고요
안녕하세요 선생님! 선생님의 해설 잘 들었습니다. 다만 제 코드가 어떤 테스트케이스에서 걸리는지 도저히 모르겠어요. 3시간 넘게 테스트케이스만 만들고 테스트해봤는데 다 잘 되고 있어서.. 제 코드는 다음과 같이 구현되어 있어요. 경우의 수는 더하기라는 것을 활용 노드의 level(depth,거리) 단위로 bfs 진행 이를 위해 정적으로 size 활용한 while(size--) 활용 visited, cnt 배열로 각각 최소 거리와 최소 시간을 도출해냄 다만 제 코드의 유의할점은 prevLoopNum과 loopNum을 사용한다는 점이에요. 이는 0 -> 1 ---(더하기 1)--> 2 0 -> 1 ---(곱하기 2)---> 2 와 같은 경우에 서로 다른 경로로 인식되는 경우를 방지하기 위함이에요. 즉, 입력: 0 3 출력: 3 1 이 나오도록 만들기 위함이에요. https://www.acmicpc.net/source/share/cc7572065f6146b8850e8ee371089353
큰 돌 선생님 안녕하세요. 항상 명강의 잘 듣고 있습니다. (_ _) 다름이 아니라 약간 큰 돌쌤을 빙의해서 문제들을 먼저 풀고 > 해결을 보면서 차근차근 나아가고 있는데요. 다름이 아니라 3197 백조의 호수 2개의 Queue 로 푸는 건 인지했습니다. 그런데 시간 초과가 발생해서요. 코드 링크 http://boj.kr/23d82bb7e38c40b094f71a83b76d7e19 제가 예상하는 부분은 check() 메서드에서 fill(&visited2[0][0], &visited2[0][0] + (SIZE - 1) * (SIZE - 1), 0); 이 부분이 시간 초과에 영향이 큰 것 같은데 맞을까요? 문제는 이제 틀리더라도 맞는 방향으로 나아가는 것 같은데, 항상 문제를 풀고 나면 시간 계산을 할 때 어렵네요. 바쁘지 않으실 때 확인 부탁드립니다. 감사합니다.
안녕하세요, 큰돌 선생님! 완전 이진 트리에 대한 설명에 대해 보충 의견 드리고자 글 남기게 되었습니다. 설명 중 "완전이진트리의 특징은 깊이가 3일 경우 2^3 - 1 = 7개의 노드를 갖는다" 라고 설명해주신 부분이 존재합니다. 다만 해당 특징은 완전이진트리 중에서도 포화이진트리 에 대한 설명으로 알고 있습니다. 문제의 조건 중 2^k - 1 개의 노드를 갖는다는 조건이 존재하기 때문에, 단순한 완전이진트리가 아닌 포화이진트리가 되기 때문에 해당 문제의 해설이 성립될 수 있었던 것이라고 생각합니다. 혹시 제가 완전이진트리에 대한 개념이 잘못된거라면 지적 부탁드립니다! 감사합니다.
안녕하세요 선생님! 저는 3-D (4179) 문제를 다른 방식으로 풀었어요. 불이 확산되는 속도 vs 사람이 빠져나가는 속도를 비교한게 아니라, 매 loop마다 불을 먼저 확산시키고, 그다음 사람을 움직여보면서 탈출 가능여부를 체크했어요. 또한, index를 0이 아닌 1부터 사용하도록 구현해두어 그에 맞게 조건문들도 구현해두었고요. 제가 만든 테스트 케이스, gpt가 만들어준 테스트 케이스는 전부 통과하는데 백준에서는 계속 틀렸다고 나오네요. 어떤 테스트 케이스에서 걸리는건지 도통 모르겠는데, 도와주실 수 있으신가요? http://boj.kr/fafb46e051fc462fb1c2e8c1f12c403f
안녕하세요! 지금 알고리즘 책을 보면서 공부 중인데, 사소한 의문이 생겨 질문드립니다. 책에서는 구간합 배열을 저장하는 S 벡터와 나머지 카운트를 저장하는 C 벡터의 자료형을 long 으로 사용하고, 정답을 누적하는 answer 는 long long 으로 선언하셨습니다. 조건을 보면 구간합 배열의 원소가 최대 101510^{15}1015까지 커질 가능성이 있어, long long 을 쓰는 것이 안전해 보입니다. 그런데 책에서는 S 와 C 에 long 을 사용한 것이 의아했습니다. 조사를 해보니, 백준 온라인 저지의 채점 환경은 64비트 Linux 라서 long 이 8바이트로 long long 과 동일한 크기라는 것을 알았습니다. 그런데 answer 는 굳이 long long 으로 선언한 특별한 이유가 있는지 궁금합니다. 혹시 제가 놓친 자료형 선택의 의도가 있을까요?
http://boj.kr/08916a4be30641928e5ee933aa6ccc62 해당 문제풀이에서 뭐가 잘못됬는지 잘 모르겠습니다. 테스트 코드는 잘 돌아가는데 어떤 부분에서 논리적오류가 발생했는지 알수있을까요 풀이 로직은 1과 2의 스코어가 같을때 이전에 이기고 있던 사람이 있다면 ret에 더해주기 이고 승부가 갈리는 시점만 시간을 기록해둔다 입니다/. 그래서 s1-s2==1이고 이전에 비기고 있던 상태 즉 winner==0이라면 해당 시점의 승자를 1로 세팅하고 시간을 기록하고요 s1==s2로 같이지고 이기고 있던 winner가 존재한다면 해당 시점의 시간을 정수로 저장하려합니다.
안녕하세요! 쿼드트리 문제를 풀던 중, 도저히 감이 잡히지 않아서 4구역으로 나누어 문제를 해결해야 한다는 힌트를 얻고, 문제를 풀었습니다. 예제로 테스트 완료 후에 큰돌님 해설과 비교하는 과정에서 제 코드와 조금 다른 점을 발견했습니다. 아래 링크는 제가 작성한 코드입니다. http://boj.kr/ba004714b82449848c1e7cafc9afb6f7 go라는 함수에서 bool 값을 통해 그냥 값을 내보낼지, 괄호 안에 다시 4구역의 값을 구해 넣을지를 다음 단계에서 수행하도록 했는데, 웬만한 테스트케이스에서는 잘 통과함에도 불구하고 틀렸다는 결과가 나오더라구요 4구역으로 나누어 다시 재귀함수를 호출하는 부분이 꼭 이중for문 내부에 있어야만 하는 건가요? 틀린 이유를 찾고 싶어서 질문 드립니다 ㅜㅜ
안녕하세요 강사님 강의 매우 잘 듣고 있습니다! 제 방식대로 하다가 잘 안된 부분들은 강사님 로직을 참고해서 구현해봤는데요 예시 문제는 올바르게 값이 나왔습니다. 하지만 채점을 돌리면 3%쯤에서 오답으로 나오는데... 어느 로직에서 잘못됐을까요...? 질문하기 게시판의 반례 예시는 다 맞았습니다..! http://boj.kr/43dc36e6e08c4f1985b78c9d306f4bf5
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 항상 좋은 강의 감사드립니다! 해당 문제를 풀면서 생겼던 문제 관련해서 문의드리고자 합니다. 제가 처음 풀었던 방식은 기존 탑다운 방식과 유사하게 (초기메롱) 방식으로 풀이를 진행하였으나 아래와 같이 시간 초과가 떴습니다. https://www.acmicpc.net/submit/2294/97783160 이로 인해 재귀 방식으로 인한 시간초과인가? 바텀업 방식을 써야되구나라고 생각은 하였으나 아래와 같이 초기값을 -1로 초기화하고 진행하였을 때는 바텀업(반복문)방식보다는 조금 느렸지만 통과하였습니다. https://www.acmicpc.net/submit/2294/97784123 두 코드의 차이가 어디서 발생하는지 와닿지 않아 이렇게 문의드립니다. 감사합니다!