안녕하세요 선생님 🙂 이해가 되지 않는 부분이 있어서 질문 글 올립니다. 문제를 보니, 일단 완전탐색과 visited배열의 가중치를 증가시키는 방법이 떠올랐습니다. 완전탐색은 DFS로 구현(BFS는 복잡함) visited배열의 가중치를 증가시키려면 BFS를 사용 위의 2번 방법은 완탐을 사용하려면 불가능한 방법이기 때문에 함수에 cnt라는 int형 파라미터를 추가하여 풀이를 해보았습니다. 하지만 무언가에 막혀서 선생님 강의를 틀었는데요, 완탐을 사용하시면서 visited배열의 가중치를 증가시키시더라구요. 그동안 배웠던대로라면 이건 불가능한 방법이 아닌가요? 너무 헷갈립니다.. 팁 좀 주시면 감사하겠습니다!!
안녕하세요 선생님. 처음 문제를 풀 때 투포인터로 문제를 풀었습니다. (아래는 첫번째 풀이) http://boj.kr/3a10ce5dba1d4b2ba3ff506e08ea07cc 그런데 생각을 해보니, 2 2 2 7 7 7 이렇게 나오는 경우도 있지않을까? 싶어서 map을 사용해 다시 풀었습니다. (아래는 두번째 풀이) http://boj.kr/683ffbaa42d741caa47966d54cd814a1 투포인터로 짠 첫번째 로직은 2 2 2 7 7 7 의 경우 답이 3개가 나옵니다. 그리고 map으로 짠 경우, 9개가 나옵니다. 2가 3개, 7이 3개 가 있으니까 3 * 3 = 9 이렇게 나옵니다. 이렇게 두 풀이가 하나의 입력에 대해 답이 다른데 두 풀이 모두 정답으로 나옵니다. 제가 문제를 잘못이해한 것인지 왜 답이 다르게 나오는 두 풀이가 다 정답이 되는지 모르겠습니다 ㅜ..
82161918번 소스 코드 (acmicpc.net) 우선 설명해주신 로직은 dfs와 인구이동을 한버에 하시는 것 같습니다. 제 로직은 while(true) 연합생성 연합생성이 않되면 break; 연합이 생성되면 인구 이동 입니다. 처음에 시도했을 때, 시간초과가 나서, BFS,DFS 모두 구현해보았는데, 어느 부분에서 더 줄일 수 있는 지 궁금합니다.
교안 질문 드립니다! Fill()파트를 공부 하다가 #include <bits/stdc++.h> using namespace std; int b[10][10]; int main(){ int *ptr = &b[0][0]; int size = 10 * 10; for(int i = 0; i < size; ++i) { *(ptr + i) = 1; } for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ cout << b[0][0] << " "; } cout << "\n"; } return 0; } 이 코드에서 궁금한것이 생겼습니다. 원래대로라면 b[i][j]가 맞을것 같은대 신기하게도 이 코드를 출력 해도 1이 100번 출력이 되어서 이 부분이 궁금합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 해당 강의 홀수일때 처리하는 아래 코드에서 if (b % 2) ret = (ret * a) % c; (ret * a) % c 가 아니라 (ret * a%c) % c가 맞다고 생각 하였습니다. 예를 들어서 2^5가 들어간다고 생각해보면 모듈러 계산 공식에 맞춰서 (2^5)%c = (2^4%c * 2%c)%c 로 계산이 되기때문에 (ret * a%c) % c 라고 생각하였는데, 혹시 이 부분에서 제가 개념을 잘못 파악하고있는건지 궁금합니다
안녕하세요 선생님 🙂 이 문제를 이해하고 직접 풀기까지 많은 시간이 소요된 것 같습니다. 그래도 덕분에 업그레이드가 많이 된 것 같네요 ㅎㅎ 다름이 아니라, go함수 안에 있는 이중 for문의 for(int j = 1; j < n; j++)에서 범위가 왜 j < n이 정답이 되는지 잘 모르겠습니다. j <= n을 하여 세로선(가로인덱스)의 마지막 부분도 체크를 해줘야 할텐데 체크를 안해도 정답으로 인정되는게 이해가 안됩니다;; 알려주시면 감사하겠습니다 :)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이와 같이 코드를 작성하였는데 시간 초과가 나는데 왜 그런 것인가요? 일부러 시간복잡도가 m*n이 되지 않게 하려고 맵 2개를 만들어서, o(n)이 최고 시간복잡도가 되게끔 설계하였습니다. #include <bits/stdc++.h> using namespace std; int n; // 포켓몬의 수 int m; // 문제 수 map<int, string> poketmonsByNumber; map<string,int> poketmonsByName; vector<string>searchId; string name; string question; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin>> n >> m; for(int i=0; i<n; i++){ cin>>name; poketmonsByNumber[i+1]=name; poketmonsByName[name]=i+1; } for(int i=0; i<m; i++){ cin>>question; if (isdigit(question[0])) { int id = stoi(question); searchId.push_back(poketmonsByNumber[id]); } else{ string id=to_string(poketmonsByName[question]); searchId.push_back(id); } }; for(auto id : searchId) { cout<<id<<endl; } return 0; }
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님. 입력받은 문자열을 map을 사용해 알파벳 당 개수로 저장했습니다. 홀수가 2개 이상이면 sorry를 출력하도록 했습니다. 홀수가 1개인 경우, 홀수 알파벳의 개수 -1 을 하고 , 홀수 알파벳을 저장했습니다. 그 후 다시 루프를 돌면서 각 알파벳 개수의 절반만큼 오름차순으로 문자열을 만들고, 미리 저장해둔 홀수 알파벳 1개를 더한 뒤 , 오름차순 문자열을 뒤집어서 더하는 방식으로 코드를 구현했습니다. 이것저것 다 넣어서 해봤지만 반례를 찾지 못하고있습니다 ㅜ http://boj.kr/86a69d1d5ce647b09c5a121b0c9e5ea9
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 아래와 같이 코드를 작성했는데요, 제가 짜낼 수 있는 예외 케이스들을 넣어서 돌려봐도 잘 돌아가는데 왜 틀렸다고 나오는지 모르겠네요 ㅜ https://www.acmicpc.net/source/82101102
http://boj.kr/7c3f26d3241248269e0dafaccddfdc0e 안녕하세요 큰돌 선생님. 이번 문제를 탑다운 방식으로 풀어 봤는데 어느 부분이 틀린지 모르겠습니다... 그리고 dp배열을 0이 아닌 -1로 초기화 하는 이유가 0이 답의 범위에 있다라고 다른 질문에서 얘기해 주셨었는데 0이 답의 범위라는게 문제의 답이 0이 나올 수 있다는 건지 dp배열 안의 값이 0이 될 수 있다는 의미인지 잘 모르겠습니다
안녕하세요. 강의를 보기 전에 문제를 먼저 풀어보았습니다. 5!를 생각해보면 5*4*3*2*1 인데, 5가 나오기 위해선 반드시 2와 4가 나와야하고, 따라서 5의 개수가 무조건 적다고 생각했습니다. 그래서 10억 이하의 모든 5의승수를 저장해놓는 배열을 만들어두고, 1~n 사이의 수 중 5^k로 나누어 떨어지는 수가 발견되면 cnt에 k를 더하도록 만들었는데, runtime error가 발생했습니다. 에러 코드는 divide by zero 가 나오는데, 나눗셈을 사용하지 않는데 이런 에러가 왜 발생하는걸까요? http://boj.kr/f55433f25a704564a5d253bad99cd7ac
http://boj.kr/7eea708ea65645e784b2eaab4ec27b88 다음과 같은 방법으로 시간을 0에서 부터 시작하여 K시간까지 하는 방법으로 코드를 작성하였는데 왜 틀린 답이라고 나올까요?? 만약 저와 같은 방법으로 하려면 어떤 식으로 코드를 수정해야 될까요? 아 그리고 -1e6 == -1000000이라고 생각하면 될까요?
강의에서 10,000 x 10,000 행렬의 덧셈을 해결하고자 했고, 이를 2D thread block(32 x 32)으로 풀어내셨습니다. 1D thread block을 사용하지 않는 것에 대한 의문 이 들었습니다. [질문] 1D thread block은 실무에서 잘 쓰이지 않나요? 의문을 가진 이유는 다음과 같습니다. 우선 2D로 설계할 경우, thread block의 dimension을 어떻게 설정하는지에 따라 낭비되는 thread가 달라집니다. [1 x 1,024] : GridDim(10,000 x 10 x 1), 2,400,000개 낭비 [2 x 512] : GridDim(5,000 x 20 x 1), 2,400,000개 낭비 [4 x 256] : GridDim(2,500 x 40 x 1), 2,400,000개 낭비 [8 x 128] : GridDim(1,250 x 79 x 1), 1,120,000개 낭비 [16 x 64] : GridDim(625 x 157 x 1), 480,000개 낭비 [32 x 32] : GridDim(313 x 313 x 1), 320,256개 낭비 Thread 낭비가 가장 적은 block dimension은 강의에서 소개해주신 [32 x 32] 입니다. 저는 여기서 1D로 설계했을 때, 낭비되는 therad의 개수가 궁금해졌습니다. [1,024] : GridDim(97,657 x 1 x 1), 768개 낭비 1D로 thread block을 설계했을때, therad 낭비는 768개로 2D로 설계하는 경우와 비교했을때 적지않은 차이라고 생각합니다. 물론 실제로 측정해본 결과(RTX 3090) 약 40 usec 차이로 1D thread block인 경우가 더 빠르긴 했지만 생각보다 큰 차이는 아니었습니다. 양질의 강의를 제공해주셔서 감사합니다!!
http://boj.kr/38e288735ce042b08b79f4830cc93119 결국 괄호 묶기는 3숫자 중에 연산 앞으로 2개 묶나 뒤로 2개묶나를 비교해서 더 큰연산을 가져오는 방식이라 생각해서 이렇게 진행했는데 틀렷다고 나옵니다. 어떤 부분에서 논리가 틀렸는지 궁금합니다
http://boj.kr/6fddcaf0cc7c429f979e53823889d3bd 저는 이렇게 ret 을 0으로 두고 풀었는데요. 만약 ret을 1로 두고 푼다면 비에 전체가 잠기는 경우에는 안전영역이 0일텐데 이경우에 어긋나서 틀려야 되는거 아닌가요? 예를 들면 2*2로 50 50 50 50 의 높이로 구성된 지역에 비가 100씩 와버리게 되면 안전영역은 0개가 아닌가요? 그래서 ret은 1이 되면 안된다고 생각하는데 왜 맞게끔 채점이 되는건지 궁금합니다.
큰돌님 안녕하세요? 해당 강의의 아래 질문과 같이 combi() 함수 구현 중 값에 의한 호출 / 참조에 의한 호출을 잘못해서 시간 초과가 발생했습니다. // 해당 질문 링크 https://www.inflearn.com/course/lecture?courseSlug=10%EC%A3%BC%EC%99%84%EC%84%B1-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%81%B0%EB%8F%8C&unitId=228311&tab=community&q=1286398&category=questionDetail 저도 combi 함수의 파라미터인 vector<int>를 값에 의한 호출로 써서 시간 초과가 났는데요, 값에 의한 호출을 사용한 이유 중 하나는 교안에 값에 의한 호출의 combi 예제가 있고 참조에 의한 호출 combi 두 가지 예제가 있어서 값에 의한 호출 예제를 사용했습니다. vector<int>의 경우 무조건(?) 참조에 의한 호출이 더 좋다면, (제가 이해한게 맞다면?) (최신 교안 150p) 교안의 아래 예시도 참조에 의한 호출로 바꾸면 어떨까요? (최신 교안 기준 165p)