월 33,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H 비트마스킹 질문 있습니다.
안녕하세요, 강의 잘 듣고 있습니다.문제를 읽고, 스스로 짜보고 있습니다.그런데 비트마스킹 부분에서 제가 생각한 것처럼 동작하지 않아 무슨 부분이 문제인지 궁금합니다.아무리 print를 찍어서 찾아보려고 해도 찾지 못해 질문드립니다. 문제 부분// DFS 함수 (18, 19번째 줄)if(a[y][x] & (1 << i)) continue;_ret += dfs(ny, nx); http://boj.kr/b423ee8869844758a31b0c3c5d67fd49
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 p176 질문 드립니다
안녕하세요 큰돌님 😀 교안 p176에 10진법을 2진법으로 바꾸는 코드에서#include <bits/stdc++.h> using namespace std; vector<int> v; int main() { int n = 100; int b = 2; while (n > 1) { v.push_back(n % b); n /= b; } if (n == 1) v.push_back(1); // 마지막 몫이 1일 때 reverse(v.begin(), v.end()); for (int a : v) { if (a >= 10) // 이 조건은 16진법 변환을 위해 필요함. { cout << char(a + 55); // char(a + 55)에서 a가 10이면 char(65)가 되서 'A'가 된다. } // 16진법은 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}로 표현하는 방법 else { cout << a; } } return 0; }while문에서 조건을 n > 1로 하신 이유가 궁금합니다!while (n > 1) { v.push_back(n % b); n /= b; } if (n == 1) v.push_back(1); // 마지막 몫이 1일 때이 부분을while (n >= 1) { v.push_back(n % b); n /= b; }이렇게 바꾸면 문제가 생길까요?? 제가 n에 여러 값을 넣어봤을 땐 문제가 없었는데 반례가 있다면 알려주시면 감사하겠습니다!
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
메모리 초과가 나는데 선생님 코드와 어디가 다른지 모르겠습니다..ㅠㅠ
#include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <map> #include <queue> #include <string> #include <math.h> #include <cstring> #include <stack> using namespace std; int arr[3] = {}; int dmg[6][3] = { {1,3,9},{1,9,3},{9,1,3}, {9,3,1},{3,1,9},{3,9,1} }; int visited[64][64][64] = {}; struct A { int a; int b; int c; }; queue<A> mq; void BFS() { while (!mq.empty()) { int x = mq.front().a; int y = mq.front().b; int z = mq.front().c; mq.pop(); if (visited[0][0][0]) { break; } for (int i = 0; i < 6; i++) { int nx = x - dmg[i][0]; if (nx < 0) { nx = 0; } int ny = y - dmg[i][1]; if (ny < 0) { ny = 0; } int nz = z - dmg[i][2]; if (nz < 0) { nz = 0; } if (visited[nx][ny][nz] != true) { mq.push({ nx,ny,nz }); visited[nx][ny][nz] = visited[x][y][z] + 1; } } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; for (int i = 0; i < N; i++) { cin >> arr[i]; } mq.push({ arr[0],arr[1],arr[2] }); visited[arr[0]][arr[1]][arr[2]] = 1; BFS(); cout << visited[0][0][0]-1; } 메모리 초과가 나는데 아무리 봐도 어디가 나는지 모르겠습니다ㅜㅜ..
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-H 메모리초과
http://boj.kr/8e44c6b66d4644008651ce44ab448ea8res.push_back(k); for (int i = prev[k]; i != n; i = prev[i]) { res.push_back(i); }이 부분으로 인해서 메모리초과가 발생하는 거 같은데 왜 발생하는지 이유를 잘 모르겠습니다.
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-L 질문있습니다
http://boj.kr/96d35c5b502442c08daba88212df08c4큰돌님 코드를 보니까 string 사용하신 부분 외에는 거의 동일한 것 같은데 자꾸 3%에서 틀렸다고 나와요.이유를 알 수 있을까요?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-I 질문있습니다.
투포인터를 하기 위해서 정렬을 사용하셨는데,문제를 읽어보면 '... a1, a2, ..., an으로 이루어진 수열이 있다. ... 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는'이라는 문구가 있어서, 정렬을 하게 되는 순간 기존의 index 순서가 바뀌기 때문에 함부로 정렬을 하면 안되는 문제 아닌가요?
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
반례를 못찾겠습니다.
다음과 같이 선생님 코드를 참고하여 구현했는데 어디서 틀렸는지 모르겠습니다. http://boj.kr/ff14d895e1de44258e860f9df1dc81d9 그리고 수업을 들을 때 문제 풀이가 감도 안잡히면 해설을 조금 보고 풀이를 해본 다음에 그래도 안되면 코드를 참고해서 구현하는데 이런 방식으로 들어도 될까요?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-B 질문
안녕하세요 강사님, 코드 관련해서 질문이 있습니다.강사님께선 int &ret = dp[STR][INT]; if(ret != -1) return ret; 방식으로 코드를 작성하셨고,저는if (dp[strength][intelli] != -1) return dp[strength][intelli];방식으로 코드를 작성했습니다.그런데, 제 코드는 계속 오류가 납니다.어떤 부분에서 오류가 나는지 알려주시면 감사하겠습니다.http://boj.kr/4e74c937e8b440c3989b1cfcceb69f53
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안에 제시된 string - split()의 효율성 관련 질문드립니다.
안녕하세요, 큰돌님!교안에서 제시된 내용을 기반으로 알고리즘 문제를 풀다가 궁금한 부분이 생겨 질문드렸습니다.교안에서 제시된 문자열 - split 함수는 아래와 같습니다.vector<string> split(string input, string delimiter) { vector<string> ret; long long pos = 0; string token = ""; while((pos = input.find(delimiter)) != string::npos) { token = input.substr(0, pos); ret.push_back(token); input.erase(0, pos + delimiter.length()); } ret.push_back(input); return ret; }저는 위 함수를 응용하거나 문제를 해결하는데, 오늘 백준의 5430번 문제를 해결할 때도 위와 같은 로직의 코드를 작성하여 문자열 split을 시도하였습니다.// I-2. 각 테스트 케이스의 첫째 줄에는 수행할 함수 p가 주어진다. cin >> _p; // I-3. 다음 줄에는 배열에 들어있는 수의 개수 n이 주어진다. cin >> _n; // I-4. 다음 줄에는 [x1, ... xn]과 같은 형태로 배열에 들어있는 정수가 주어진다. cin >> _x; string origin = _x.substr(1, _x.size() - 2); vector<string> vs_x(_n); if(origin.empty()) { } else { int pos = 0; int cycle = 0; while((pos = origin.find(',')) != string::npos) { string tmp = origin.substr(0, pos); vs_x[cycle++] = tmp; origin.erase(0, pos + 1); } vs_x[cycle] = origin; } 코드에 대해 부연설명을 드리자면, 입력을 통해 문자열을 받게 되면, 해당 문자열의 첫번째와 마지막 인덱스를 제외한 문자열을 origin에 저장한 후, 이 문자열 origin을 컴마(,)를 기준으로 split 하였습니다. 예를 들어, [1, 2, 3]이라는 문자열을 입력(_x)으로 받았다면, 변수 origin에 1,2,3을 저장한 후 컴마를 기준으로 문자열을 split할 수 있습니다.하지만, 위 코드와 함께 문제를 해결하고자 할 때, 지속적으로 시간 초과 문제가 발생하였습니다. 따라서 split 함수를 다음과 같은 로직으로 변경한 후 답안을 다시 제출하였으며, 그 결과 시간 초과가 발생하지 않고 문제를 해결할 수 있었습니다.// I-2. 각 테스트 케이스의 첫째 줄에는 수행할 함수 p가 주어진다. cin >> _p; // I-3. 다음 줄에는 배열에 들어있는 수의 개수 n이 주어진다. cin >> _n; // I-4. 다음 줄에는 [x1, ... xn]과 같은 형태로 배열에 들어있는 정수가 주어진다. cin >> _x; string token = ""; vector<string> vs_x(_n); int cycle = 0; for(int j = 0; j < _x.length(); ++j) { if(isdigit(_x[j])) { token += _x[j]; } else { if(!token.empty()) { vs_x[cycle++] = token; token = ""; } } } 제가 궁금한 것은 위에 제시된 split에 대한 두 개의 로직이 왜 효율성 차이가 나는지 잘 모르겠습니다.. origin.erase(0, pos + 1)이 O(n)의 시간 복잡도를 요구하면서, 첫 번째 로직은 O(n^2)의 시간 복잡도와 두 번째 로직은 O(n)의 시간 복잡도를 필요로 할 수도 있겠다는 생각이 들기도 하지만, 정확하게 어떤 부분이 큰 차이를 불러 일으키는지 잘 모르겠습니다. 감사합니다!
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-A 질문있습니다
http://boj.kr/b8eaa84254ba4993b722f0482d6c1280조합 함수를 다음 요소를 선택한다, 안한다로 나눠 뻗어나가도록 재귀를 구현하였습니다..1개를 택할 때는 따로 구해주었는데 어떤 걸 놓친 걸까요?테스트케이스는 모두 통과하였는데 오답입니다
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-A 오답 관련 질문입니다. (to_string 사용 시)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 듣고 있습니다!!해당 문제를 푸는데, 이해가 되지 않는 현상이 있어 질문드려요 비트마스킹으로 조합을 획득하여 이를 다시 순번으로 복원하는 과정에서 ret += to_string(j+1); 로 하니 오답이 발생했습니다.무엇이 문제일지 전혀 감을 못잡다가..,ret += (char(j+1) +'0'); 으로 해주니 정답 처리가 되었는데요 그 이유가 무엇일지 궁금합니다.감사합니다. 전체 코드 >> #include <bits/stdc++.h> using namespace std; int N; int mp, mf, ms, mv; vector<vector<int>> m; int main() { cin >> N; cin >> mp >> mf >> ms >> mv; m = vector<vector<int>>(N, vector<int>(5, 0)); for (int i = 0; i < N; ++i) { for (int j = 0; j < 5; ++j) { cin >> m[i][j]; } } /* 0000000: 0 0000001: 1 0000010: 2 0000011: 3 ... */ int min_C = 500 * 200; vector<string> ans; for (int i = 0; i < (1 << N); ++i) { int sum_p = 0, sum_f = 0, sum_s = 0, sum_v = 0, sum_c = 0; for (int j = 0; j < N; ++j) { // 비트 마스킹을 통한 조합 combination 획득 if (i & (1 << j)) { sum_p += m[j][0]; sum_f += m[j][1]; sum_s += m[j][2]; sum_v += m[j][3]; sum_c += m[j][4]; } } if (sum_p >= mp && sum_f >= mf && sum_s >= ms && sum_v >= mv) { if (min_C > sum_c) { min_C = sum_c; string ret = ""; for (int j = 0; j < N; ++j) { if (i & (1 << j)) { // ret += to_string(j+1); << 오답 ret += (char(j + 1) + '0'); // << 이렇게 해주니 비로소 정답 } } ans = {ret}; } else if (min_C == sum_c) { string ret = ""; for (int j = 0; j < N; ++j) { if (i & (1 << j)) { // ret += to_string(j+1); << 오답 ret += (char(j + 1) + '0'); // << 이렇게 해주니 비로소 정답 } } ans.push_back(ret); } } } if (ans.empty()) cout << -1; else { cout << min_C << "\n"; sort(ans.begin(), ans.end()); for (char s : ans[0]) { cout << int(s - '0') << " "; } } return 0; }
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-M 질문 드립니다!
스택 말고 vector를 이용해서 이렇게 풀었는데 꼭 스택을 사용 해야 하는 건가요??#include <iostream> #include <vector> using namespace std; int n; int cnt = 0; int main() { cin >> n; for (int i = 0; i < n; i++) { string s; cin >> s; vector<char> arr; for (int j = 0; j < s.length(); j++) { if (arr.empty() || arr.back() != s[j]) { arr.push_back(s[j]); } else { arr.pop_back(); } } if (arr.empty()) cnt++; } cout << cnt; return 0; }
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1주차 개념#7에서 재귀함수의 시간복잡도를 구할 때 메인 로직은 어떤 기준으로 결정하는건가요?
안녕하세요.재귀함수의 시간복잡도를 구할 때 (메인로직)*(함수호출횟수)라고 알려주셨는데, 여기에서 메인 로직은 어떤 기준으로 결정되는건가요?감사합니다!
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
반례를 못찾겠습니다.
http://boj.kr/7b036ef3742940cd860da4b66f630c0b 이론에서 배웠던 코드를 이용해서 구현했는데 어디서 틀렸는지 못찾겠습니다.
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
문제를 풀다가 정수 관련하여 질문이 생겼어요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. cin >> N >> K; queue<int> q; q.push(N); // visited[N] += 1; NK = K + 1; cout << K << N;이렇게 하면 -1 -1을 입력했을 때 -1 -1이 잘 출력되는데 주석을 지우고 실행하면 0 -1이 출력되는 현상이 발생합니다.. #include <bits/stdc++.h> using namespace std; int N, K, visited[500004], prevN, searchTime = 0, flag = 0; int NK = 0; int main() { cin >> N >> K; queue<int> q; q.push(N); // visited[N] += 1; NK = K + 1; cout << K << N; }
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-I 지문 문제
http://boj.kr/ea0856e69f854bb9afee8490ed73794d 코드의 질문은 아닙니다.. 지문의 (하지만 하나의 파닭에는 하나 이상의 파가 들어가면 안 된다.) 라는 부분을 읽고 파는 무조건 나뉘어져야 한다. 라고 생각하고 조건을if(temp>mid)으로 달았었거든요 어디서 틀렸나 강의 봤는데if(temp>=mid) 였더라구요이렇게 되면 파를 통째로 사용하게 되는 경우도 생겨 오답인 것이 아닌가요?코드 질문은 아니여서 올릴까 말까 하다가.. 찜찜해서 질문드립니다!
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-A 치킨 배달 시간초과 관련 질문 입니다!
http://boj.kr/5b5feb84a65f44c19188df5fbe697fe6선생님의 풀이와 크게 다르지 않은거 같은데 어디서 시간초과가 나는지 잘모르겠습니다...
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-Q 질문있습니다
http://boj.kr/0cfb08048b9141b798f199cfd9993367굉장히 직관적으로 풀었는데,치즈가 남아있는지 체크남아있다면, 치즈의 가장자리 녹이기 (반시계방향으로)남아있는 치즈의 덩이 (연결요소 개수) 개수 구하고 또 녹이기. 형식으로 구현했습니다..테스트 케이스는 어찌저찌 맞은듯 한데 어디에 문제가 있는 코드일까요
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-J [14497:주난의 난] 질문 있습니다.
큰돌님 안녕하세요? 항상 강의 잘 보고 있습니다. http://boj.kr/b8636c720918477b86a00858b5a8929a위의 제 코드를 채점했을 때 96%에서 "틀렸습니다"로 채점됩니다.반례가 도저히 생각나지 않아 큰돌님께 여쭤보고 싶어서 질문글을 작성하게 되었습니다. 항상 감사드립니다 !
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-L 질문있습니다.
http://boj.kr/a0d2f4d95b384de39d9b01503b89f68c 강의 풀이같은 경우엔, 골이 들어간 시점마다 승부를 비교해 누적해주는 식으로 구현하셨는데,저는 무승부가 된 시점에, 그 시점에서 이전 골 기록을 빼고 누적해주는 식으로 구현했습니다.. 테스트는 통과하는데 제출시 오답입니다.어떤 반례가 있는지 못 찾겠습니다 ㅠ 제 코드는 왜 틀린걸까요?