월 33,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 정말 모르겠습니다 ㅠㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/ea14b76bba984f7d95c8c9a8ba109d94선생님 ㅠㅠㅠ 이게 도대체 왜 안되는건지 잘 모르겠습니다...
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 p136 질문있습니다
안녕하세요. 교안 p136 예제 코드에서#include <bits/stdc++.h> using namespace std; struct Point { int y, x; }; struct cmp { bool operator()(Point a, Point b) { return a.x < b.x; } }; priority_queue<Point, vector<Point>, cmp> pq; int main() { pq.push({1, 1}); pq.push({2, 2}); pq.push({3, 3}); pq.push({4, 4}); pq.push({5, 5}); pq.push({6, 6}); cout << pq.top().x << "\n"; return 0; }operator가 오버로딩 된 것까진 알았는데 그럼 operator()는 ()라는 연산자를 오버로딩 한 것인가요..??()라는 연산자는 무슨 의미를 가진 건가요..? ㅜㅜ 설명해주시면 감사하겠습니다.priority_queue<Point, vector<Point>, cmp> pq;그리고 이렇게 priority_queue를 선언할 때 인자가 세개 들어가는 게 각각 무슨 의미인지 설명해주실 수 있나요..? 검색을 해도 언급되는 부분을 못 찾겠어서요ㅜㅜ
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R 질문있습니다..
http://boj.kr/e351fd164d5943d29c80fef4e6fb27d6자식노드를 담아주는 인접 리스트를 만들고,cut함수로 잘라낸 노드와 그 자식들을 dead체크를 해주었습니다. 그리고 남은 트리에 관하여, dead 체크와 자식 체크를 해주어 리프 노드를 구해봤는데 무엇이 잘못된 것일까요 ...
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-J 질문
http://boj.kr/a4d6ba76bf2f4964a2ffaccf343ffaa9주난이를 기준으로 퍼져나가면서 0이면 queue에 넣고 1이면 배열에 넣어두었다가 0으로 바꿔주는 방법을 사용했는데 어디서 틀린건지 궁금합니다.
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 p131 질문 있습니다
안녕하세요 큰돌님 😀교안 p131의 'x를 1순위로 오름차순으로 정렬하고 y가 2순위로 내림차순 z가 3순위로 오름차순 정렬이라는 문제'의 예제 코드에서struct Point { int x, y, z; Point(int y, int x, int z) : y(y), x(x), z(z) {} Point() { y = -1; x = -1; z = -1; } bool operator<(const Point &a) const { if (x == a.x) { if (y == a.y) return z < a.z; // 3순위 : z가 오름차순 return y > a.y; // 2순위 : y가 내림차순 } return x < a.x; // 1순위 : x가 오름차순 } };operator< 오버로딩 부분에서 오름차순, 내림차순이 어떻게 정해지는 것인지 정렬 로직이 궁금합니다.검색해보았더니 operator< 가 Point 내부에서 자체적으로 정렬을 시킨다고 했는데,그럼 operator< 매개변수로 들어오는 a가 어떻게 들어오게 되고 정렬을 어떻게 시키는 건지 이해가 안갑니다..ㅜㅜ예를 들어서 Point의 지역변수 x, y, z와 a의 x, y, z를 비교했을 때, x < a.x가 false이면 자리를 바꾸는 것인가요..?ㅠㅠ 로직 자체가 이해가 안 갑니다. 그리고 Point 구조체를 만드실 때 변수를 y, x 순으로 받으시는 것도, 이렇게 하면 더 편리한 이유가 있는건지 질문드리고 싶습니다!감사합니다.
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문 있습니다.
http://boj.kr/4ff659025d334003940b3c0246e40c58카운트를 할 때 인덱스 0에 A카운트, 1에 B카운트 .. 진행을 해서 구현했습니다.if(mid) { answer.insert(answer.begin() + answer.size() / 2, mid + 'A'); } 하지만 mid값을 중앙에 넣을 때 조건문에서 문제가 있는데 예를 들어 AAAAA를 넣으면 결과값으로 AAAA가 나옵니다.홀수 알파벳이 A일 때 조건문에 들어가지를 못해서 하나가 빠지는 것 같은데.. 인덱스 1일 때 A 카운트, 2일 때 B 카운트 하는 방식으로 해결할 수는 있지만 다른 방법은 없을까요?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2240번 자두나무 질문있씁니다!
안녕하세요 선생님! 제가 이해하는 것이 맞나 싶어서 여쭤보고자 질문올립니다!Q1.밑에 이부분에서는 go(0,1,m-1)같은 경우와 go(0,0,m)는 완탐 시 처음 시작하자마자 움직이는 경우에 수를 나누어서 쭉쭊죾 한다음에 max값을 찾기 위해 구현한 것이 맞을까요?cout << max(go(0, 1, m - 1), go(0, 0, m)) << '\n'; Q2.밑에 이 부분에서 ret을 참조자로 받아서 반환하는 이유가 혹시 있을까요? 참조자를 사용하지 않으면 시간초과가 나더라구요.. 참조자를 통해서 직접 적으로 dp배열의 값을 참조하면 메모리를 효율적으로 쓸수 있어서 그런건가여? 근데 또 궁금하게 int &ret을 계속 생성하는건데.. 조금 햇갈립니다..ㅠint &ret = dp[idx][tree][cnt]; if(~ret) return ret; Q3.이 부분은 현재의 index에서 다음 인덱스로 갈떄 옆에 트리로 가는경우 안가는경우나눠지는 것으로 해석하였습니다. 그런데 뒤에 go함수 같은경우는 나무이동을 안할떄로 알고 있씁니다. 뒤에 (tree ==b[idx]+1) 같은 경우는 다음 go로 넘어가기 전 현재의 위치에 tree와 그 시간대 tree에 위치가 같으면 +1 (idx시간 떄 자두를 받았기 떄문) 아니면 0을 더하는 것 이 맞나요?!?return ret = max(go(idx + 1, tree^1, cnt - 1), go(idx + 1, tree, cnt)) + (tree == b[idx] - 1);Q4. 이건 문제와 외람된 말이긴 합니다. 지금 매 주차 개념설명 들으며 2~3문제 씩 주차 문제 풀면서 다음 주차 개념을 빠르게 듣고 있습니다. 과정이 너무 어려운데 이해가 안되면 문제를 외우기보다는 그 과정이 어떤식으로 대처해야하는지 위주로 공부하고 있습니다. 잘하고있는걸까여ㅠ,,
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7_A 2분 쯤 설명이 이해가 안됩니다.
코드를 아무리 봐도 DP에 넣은 값들이 여태까지 지나온 경로들의 최적해가 아니라 visited에 포함되지않은 남은 경로들의 최적해 인거같아요.... 설명에서는 앞에서부터 쌓아가는거 처럼 설명하시는데( (a b c)든 (a c b)든 최적의 값을 구해서 d로 가면 되는거아니냐는 부분) 제가 이해를 잘못 한건가요???
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4분 54초에 combi 외우라고 어디에서 말씀 하셨나요?
블로그 완탐 글 읽는데 이문제에서는 왜 visited 처리 안하셨는지 궁금합니다! 아 그리고 combi(-1,v)로 시작하셨던데 start +1 안하고 그냥 combi(0,v)로 하면 안되나요?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 p131 3개의 멤버변수 정렬하기
해결되었습니다.
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-H 질문있습니다.
while(e<n){ if(cnt[a[e]]==0){ cnt[a[e]]++; e++; } else{ ret+=(e-s); cnt[a[s]]--; s++; } }강사님 안녕하세요?else문에서 cnt[a[s]]-- 대신 cnt[a[e]]--로 하면 틀리는 이유를 모르겠습니다. 어차피 a[s]랑 a[e]는 똑같은 값이어서 어떤 것을 줄여도 맞아야하는거 아닌가요?http://boj.kr/b07dba8700854c70b5f4031fbd5239c1
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-L 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님http://boj.kr/cd54b57de0df4ce294ae9ff069c83984next를 변수를 선언하는 것과 다음과 같이 코드를 작성하는 것에 왜 값이 다르게 출력이 되는지 여쭤보고 싶습니다. 제 코드를 돌리면 이렇게 나와요!
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[5-L] 브루트포스 방법 문의드립니다...!
https://www.acmicpc.net/source/73585978 시간초과가 발생하는데, 어느 부분을 수정해서 복잡도를 줄여야할지 잘 모르겠어요..!dfs를 실행하는 반복문을 절반으로 줄이는 방식으로 해야할까요...?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-A
와.. 일단 저는 다른 방법으로 풀었는데제가 푼 방식으로의 접근에 익숙해지면 더 난이도 높아지는 그리디 문제는 대처를 못하겠죠? ㅠ..큰돌님 로직이 큰 가격만 남게되는건 쉽게 이해했는데if(pq.size() > v[i].first)이 코드 하나로 큰 가격 + 하나의 날짜에 하나만 꽂기가가능해지는것에 이마를 탁 치고 갑니다... 그래도 제 코드 한번 봐주시고 피드백 한번 주시면 감사하겠습니다.저는가격으로 내림차순 sort한다.visited[10004]를 만들어놓는다.가장 큰 가격부터 자신의 Day에 visited[Day] = true로 해준다.만약 자신의 Day에 visited[Day]가 이미 true라면Day-1부터 1일까지 visited[]가 false일 날을 찾아 거기에 넣어준다.(찾았으면 break)이 로직으로 풀었습니다!https://www.acmicpc.net/source/73577847
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-B 누적합에서 보는 이득이 클까요?
http://boj.kr/e1c4b7529c7d4925bb95b0e38d7aec56처음에는 1~10억으로 이분탐색을 했었는데요시간초과가 나서 배열에 있는 값들을 더하고 확인하는 시간이 오래 걸리나 싶어서 누적합으로 해서 풀었는데 큰 차이는 없었습니다. 못풀어서 결국 강의 봤는데if (mx > mid) return false; 부분을 보고 감탄을 금치 못했는데요..누적합으로 바꿨을 때 답이 아니었던게 좀 충격이었던지라누적합을 이런 용도로 사용하는 것이 아닌가?라는의문이 들기도 하고 .. 누적합의 퍼포먼스를 최대로 낼 수 있는 문제가 막 떠오르지가 않아서 잘 이해하고 있는지 의문이 들어 글 남겨봅니다 ㅜㅜ
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 시간초과 & 학습 방법 고민있어요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 듣고 있습니다.강의를 참고하여 풀었는데. 시간초과가 뜹니다#include <bits/stdc++.h> using namespace std; int R, C; vector<vector<char>> lake; queue<vector<int>> candidates_Swan, candidates_SwanTemp; queue<vector<int>> candidates_Water, candidates_WaterTemp; vector<vector<int>> delta = {{-1,0},{1,0},{0,-1},{0,1}}; vector<vector<int>> visitedSwan, visitedWater; bool moveSwan(){ while(candidates_Swan.size()){ vector<int> now = candidates_Swan.front(); candidates_Swan.pop(); for(auto d : delta){ int next_i = now[0]+d[0]; int next_j = now[1]+d[1]; if (next_i >= 0 && next_j >= 0 && next_i < R && next_j < C){ if (visitedSwan[next_i][next_j] == 0){ visitedSwan[next_i][next_j] = 1; if (lake[next_i][next_j] == '.'){ candidates_Swan.push({next_i, next_j}); } else if (lake[next_i][next_j] == 'X'){ candidates_SwanTemp.push({next_i, next_j}); } else if (lake[next_i][next_j] == 'L') return true; } } } } return false; } void waterMelting(){ while(candidates_Water.size()){ vector<int> now = candidates_Water.front(); candidates_Water.pop(); for(auto d : delta){ int next_i = now[0] + d[0]; int next_j = now[1] + d[1]; if (next_i >= 0 && next_j >= 0 && next_i < R && next_j < C){ if (visitedWater[next_i][next_j] == 0){ if (lake[next_i][next_j] == 'X'){ candidates_WaterTemp.push({next_i, next_j}); visitedWater[next_i][next_j] = 1; lake[next_i][next_j] = '.'; } } } } } return; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> R >> C; lake = vector<vector<char>>(R, vector<char>(C)); visitedSwan = vector<vector<int>>(R, vector<int>(C,0)); visitedWater = vector<vector<int>>(R, vector<int>(C,0)); for(int i = 0 ; i < R ; ++i){ string s; cin >> s; for(int j = 0 ; j < C; ++j){ lake[i][j] = s[j]; if (lake[i][j] == 'L' && candidates_Swan.empty()){ candidates_Swan.push({i,j}); // 백조는 한마리 위치에서만 시작 visitedSwan[i][j] = 1; } if (lake[i][j] == 'L' || lake[i][j] == '.'){ candidates_Water.push({i,j}); visitedWater[i][j] = 1; } } } int day = 0; while(true){ if (moveSwan()) break; waterMelting(); // cout << endl; // for(auto ll : lake){ // for(auto l : ll) cout << l; // cout << endl; // } // cout << endl; candidates_Swan = candidates_SwanTemp; candidates_Water = candidates_WaterTemp; candidates_WaterTemp = queue<vector<int>>(); candidates_SwanTemp = queue<vector<int>>(); day++; } cout << day << "\n"; return 0; } 강의를 듣기 전에 먼저 문제를 풀고 강의를 듣는 방식을 고수하고 있는데, 한 문제를 푸는데 점점 시간이 늘어나 두시간 정도를 써야 겨우 한문제를 풀고 있습니다.이런 방식을 고수하는것이 좋을지,어떻게 해야하나 질문드려요. 감사합니다. ^^
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문있습니다.
http://boj.kr/0aeaba2d60a745ba87e41316d0804d89위 코드를 디버깅 해보면 v.clear()를 실행 시킨 후 dfs함수로 들어가서 v.push_back()을 하면 오류가 발생합니다.오류:"Unhandled exception thrown: read access violation._Pnext was 0x8."왜 이런 오류가 발생하는지 궁금합니다. 해결방안도 알고 싶습니다.
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2792번 보석상자 질문있습니다!
안녕하세요, 선생님 ! 2792번 선생님 코드에 질문이 있어 질문 남깁니다.check()에서 return n>=num이 약간 이해가 안됩니다.처음 저는 n>num이라고 생각했었습니다. n=num이 될 떄의 값이 최적해 겠구나 생각했었습니다.아니면 혹은 n>num일 떄도 정답이 될 수 있어서 그런 것 일까요?!?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-B 시간복잡도
http://boj.kr/efeea39f5e6946e3a9982024980b4089이 코드의 최악의 시간복잡도를 board가 모두 'L' 인 경우에 n*m*bfs--->n*m*n*m이라고 생각했는데 맞게 계산할 것인가요?
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 108p insert, erase
안녕하세요 🙂 큰돌님교안 108p에 있는 예제코드를 제가 insert와 erase를 이해하기 위해서 아래와 같이 변경하였는데요.#include <bits/stdc++.h> using namespace std; list<int> a; void print(list<int> a) { for (auto it : a) cout << it << " "; cout << '\n'; } int main() { for (int i = 1; i <= 3; i++) a.push_back(i); // a = 1 2 3 for (int i = 1; i <= 3; i++) a.push_front(i); // a = 3 2 1 1 2 3 auto it = a.begin(); it++; a.insert(it, 1000); // 3 1000 2 1 1 2 3 a.insert(it, 2000); // 3 1000 2000 2 1 1 2 3 print(a); it = a.begin(); it++; cout << "*it : " << *it << '\n'; a.erase(it); print(a); cout << "*it : " << *it << '\n'; a.pop_front(); a.pop_back(); print(a); cout << a.front() << " : " << a.back() << '\n'; a.clear(); return 0; }다음과 같이 변경해서 출력하면,3 1000 2000 2 1 1 2 3*it : 10003 2000 2 1 1 2 3*it : 22000 2 1 1 22000 : 2이렇게 나오는데, insert와 erase 메서드 모두 매개변수로 전달받은 iterator에다가 각각의 기능을 실행한 뒤 그 다음 위치(그 다음 인덱스)를 가리키도록 바꿔주는 걸까요?제 예상으로는 출력의 두 번째 *it 이 2000으로 나올 것으로 예상했는데, 2가 나와서a.erase(it);를 했을 때, it이 인덱스 1을 가리켜서 1000을 지우고 난 뒤, 그 다음 인덱스인 2를 가리키게 돼서 2를 가리키게 된 것으로 이해하였는데 맞을까요??마찬가지로 위의 insert도 인덱스 1 위치에서 삽입을 한 뒤, it은 인덱스 2를 가리키게 되고, 또 insert 해서 마지막엔 it이 인덱스 3을 가리키는 로직으로 이해하였습니다! 혹시 이러한 로직이 맞다면, list만 이런 것인지 다른 자료구조의 insert도 이런지 궁금합니다!감사합니다.