묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
DFS, BFS 소스 코드 질문있습니다
http://boj.kr/eb95bf013f5d4203bfdb1e9e027fc489백준에 DFS,BFS문제가 있어 강의 소스코드 복습차 풀어봤는데, 테스트케이스는 통과하지만 제출했을 때 오답입니다.소스코드를 응용하지 못하고 놓친 포인트가 있을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R. 질문있습니다
http://boj.kr/eaf52073800f4b9397140cea145862d6제 코드에서 놓친게 무엇일까요..!현재 노드에서 이어진 것이 없고, 잘리지 않았다면 리프노드로 판단해서 수를 카운트 해주었는데 오답입니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-O 질문있습니다!
http://boj.kr/132cce1f1dab4af7be9ad1e722220221이 코드가 틀린 이유가 뭘까요..ㅠ 도저히 모르겠네요.그리고, 정답 풀이에서 check bool 변수가 하는 역할이 무엇일까요? 제 코드와의 차이가 check 플래그 변수가 없다는 것이 가장 큰 차이인 거 같은데 왜인지 모르겠습니다..
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요 5-R 주사위 윷놀이 질문이 있습니다.
#include<bits/stdc++.h>using namespace std; const int INF = 987654321;int a[14], mal[4], n = 10;int v[104]; 에서 원소 값을 넣어주는 int v[104]; 의 배열 크기가 70, 80으로 해보면 값이 달라지는 것을 확인을 했습니다. 실제로 31까지 밖에 인덱스를 사용하지 않음에도 불구하고 100 이상으로 배열의 크기를 올려줘야 하는 이유는 무엇일까요? 통상적으로 +3정도 배열의 크기를 잡아주었습니다! 이번 예시로 앞으로 배열의 크기를 잡을 때 3배 정도의 크기로 잡아주어야 하나 고민을 하게 되었습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 p85 stable_sort()
안녕하세요! 교안 p85의 stable_sort() 예제 코드에서#include <bits/stdc++.h> using namespace std; int main() { // pair의 첫 번째 요소는 정렬한 값, 두 번째 요소는 원래 인덱스를 나타냄 vector<pair<int, int>> pairs = {{5, 1}, {2, 2}, {5, 3}, {3, 4}, {2, 5}}; cout << "Original: "; for (const auto &p : pairs) { cout << "(" << p.first << ", " << p.second << ") "; } cout << "\n"; sort(pairs.begin(), pairs.end()); cout << "Sorted with sort: "; for (const auto &p : pairs) { cout << "(" << p.first << ", " << p.second << ") "; } cout << "\n"; // 원본 데이터로 초기화 pairs = {{5, 1}, {2, 2}, {5, 3}, {3, 4}, {2, 5}}; // stable_sort 사용 stable_sort(pairs.begin(), pairs.end()); cout << "Sorted with stable_sort: "; for (const auto &p : pairs) { cout << "(" << p.first << ", " << p.second << ") "; } cout << "\n"; return 0; }for (const auto &p : pairs) { cout << "(" << p.first << ", " << p.second << ") "; }여기에서 pairs에 들어있는 타입(pair<int, int>)이 왜 const auto &인지 궁금합니다!또 교안 p83의 예제 코드에서#include <bits/stdc++.h> using namespace std; vector<pair<int, int>> v; int main() { for (int i = 10; i >= 1; i--) { v.push_back({i, 10 - i}); } sort(v.begin(), v.end()); for (auto it : v) cout << it.first << " : " << it.second << "\n"; return 0; }위의 for 문에서 pair<int, int>를 받을 때는 auto 로 받는데,두 예제가 같은 pair<int, int> 타입을 받을 때 for (const auto &p : pairs) 와 for (auto it : v) 로 다른 이유가 무엇인지 알고싶습니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-V 질문 있습니다
안녕하세요, 큰돌님 7-v 질문 드립니다.첫번째 풀이가 큰돌님의 답 코드와 비슷한 로직을 사용한다고 생각하는데,왜 시간 초과가 나는지 모르겠습니다.https://www.acmicpc.net/source/73255801백트래킹 풀이 (시간초과)https://www.acmicpc.net/source/73256688dp 배열 + 반복문 (맞았습니다!)
-
해결됨[입문] Qt QML과 C++로 시작하는 크로스플랫폼 앱 개발
onParentChanged -> onParentsignal 이유 문의
강의를 따라하면서 도중에 갑자기onParentChanged가 onParentSignal로 수정이 되었던데 onParentChanged는 언제 사용하는 걸까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
이터레이터 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.현재 교안으로 1회독중에 이터레이터 부분에서 막혀 질문드립니다. cout << &*lower_bound(a.begin(), a.end(), 3) << endl; cout << &*a.begin(); cout << &*lower_bound(a.begin(), a.end(), 3) - &*a.begin() << endl;각각의 주소값이0x139e05e580x139e05e50 임을 가정했을때0x139e05e58 - 0x139e05e50 연산이 왜 8이 아니라 2가 되는지 모르겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 문제 시간초과
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.강의 잘 듣고 있습니다.!! 혼자 풀어보는 중인데, 시간초과가 나서 오랫동안 고민하다 질문드립니다. 제 생각에는 Fire를 전파하는 부분에서 비효율이 있는듯한데,이를 개선할 방법이 딱히 떠오르지 않아서요, 질문드립니다. ㅠ #include <bits/stdc++.h> using namespace std; int R, C; vector<vector<char>> maze; pair<int, int> jihun; vector<pair<int, int>> fire; vector<vector<int>> delta = {{0,-1},{1,0},{0,1},{-1,0}}; vector<vector<int>> visited; set<int> ret; void dfs(pair<int, int>J, int step){ step+=1; // cout << "DEBUG: " << step << ", (" << J.first <<"," << J.second << ")" << endl; // for(int i = 0 ; i < R ; ++i){ // for(int j = 0 ; j < C ; ++j){ // if (i ==J.first && j == J.second) cout << "J"; // else cout << maze[i][j]; // } // cout << endl; // } // cout << endl; if (J.first == 0 || J.second == 0 || J.first == R-1 || J.second == C-1){ ret.insert(step); return; } // 1. 맵 업데이트 int cnt = 0; int s = fire.size(); for(int q = 0 ; q < s ; ++q ){ for(int p = 0 ; p < 4 ; ++p){ int nextF_i = fire[q].first + delta[p][0]; int nextF_j = fire[q].second+ delta[p][1]; if (nextF_i >=0 && nextF_j >=0 && nextF_i < R && nextF_j < C){ if (maze[nextF_i][nextF_j] == '.' || maze[nextF_i][nextF_j] == 'J'){ maze[nextF_i][nextF_j] = 'F'; fire.push_back({nextF_i, nextF_j}); cnt ++; } } } } // 2. dfs 호출 propagation for(auto d : delta){ int next_i = J.first + d[0]; int next_j = J.second+ d[1]; if (next_i >= 0 && next_j >= 0 && next_i < R && next_j < C){ if (visited[next_i][next_j] == 0 && maze[next_i][next_j] == '.'){ visited[next_i][next_j] = 1; // 방문 처리 dfs({next_i, next_j}, step); visited[next_i][next_j] = 0; // 방문 원복 } } } // 3. 맵 원복 while(cnt>0){ pair<int, int> b = fire.back(); fire.pop_back(); maze[b.first][b.second] = '.'; cnt--; } } int main(){ cin >> R >> C; maze = vector<vector<char>>(R, vector<char>(C)); visited = vector<vector<int>>(R, vector<int>(C, 0)); string s; for(int i = 0 ; i <R ; ++i){ cin >> s; for(int j = 0 ; j < C ; ++j){ maze[i][j] = s[j]; if (maze[i][j] == 'J') jihun = {i,j}; else if (maze[i][j] == 'F') fire.push_back({i,j}); } } visited[jihun.first][jihun.second] = 1; dfs(jihun, 0); if (!ret.empty()){ cout << *ret.begin(); } else cout <<"IMPOSSIBLE"; return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-H 질문있습니다
모음이나 자음이 3개가 연속으로 올 때 비밀번호로 적절하지 않다는 조건을 for문 밖으로 빼면 틀리는 이유가 알고 싶습니다!이렇게 짰을 땐 틀렸다고 나오는데 조건을 어느 부분에서 만족하지 않는지 궁금합니다#include<bits/stdc++.h> using namespace std; string str; bool mo(char c){ if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'){ return 1; } return 0; } int main(){ while(true){ cin >> str; if(str == "end"){ break; } bool moum = 0; bool same = 0; int cnt1 = 0; int cnt2 = 0; for(int i = 0; i < str.length(); i++){ if(mo(str[i])){ moum = 1; cnt1++; cnt2 = 0; }else{ cnt2++; cnt1 = 0; } if(i >= 1 && (str[i-1] == str[i]) && str[i] != 'e' && str[i] != 'o'){ same = 1; } } if(cnt1 >= 3 || cnt2 >= 3 || moum == 0 || same == 1){ cout << "<" << str << "> is not acceptable.\n"; }else{ cout << "<" << str << "> is acceptable.\n"; } } return 0; }
-
미해결Do it! 알고리즘 코딩테스트 with C++
백준11505, 교재 73번
#include <iostream> #include <vector> #include <cmath> using namespace std; static vector<long> tree; static int n, m, k,mod = 1000000007; void tree_set(int a); void change_val(int index, long val); long gugan(int s, int e); int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m >> k; int q = n; int l = 0; while (q != 0) { q = q / 2; l++; } int tree_size = int(pow(2, l+1)); int left_index = pow(2, l); tree.resize(tree_size); fill(tree.begin(), tree.end(), 1); for (int i = left_index; i < n+left_index; i++) { cin >> tree[i]; } tree_set(tree_size-1); for (int i = 0; i < m + k; i++) { long a, s, e; cin >> a >> s >> e; if (a == 1) { change_val(s + left_index - 1, e); } else if (a == 2) { long start = s + left_index - 1; long end = e + left_index - 1; long result = gugan(start, end); cout<<result<<'\n'; } } } long gugan(int s, int e) { long part_sum = 1; while (s <= e) { if (s % 2 == 1) { part_sum *= tree[s]%mod; } if (e % 2 == 0) { part_sum *= tree[e]%mod; } s = (s + 1) / 2; e = (e - 1) / 2; } return part_sum; } void change_val(int index, long val) { tree[index] = val; while (index > 1) { index = index / 2; tree[index] = tree[index*2]%mod*tree[index*2+1]%mod; } } void tree_set(int a) { while (a != 1) { tree[a / 2] *= tree[a]%mod; a--; } } 위의 방법으로 코드를짜서 제출했더니 출력초과가 발생합니다. 왜 이런오류가 발생하는지 모르겠습니다..
-
해결됨홍정모의 따라하며 배우는 C++
9.11 8분쯤 질문
#include <iostream> #include <cassert> using namespace std; class MyString { public: char *m_data = nullptr; int m_length = 0; public: MyString(const char *source = "") { assert(source); // 받은 문자열이 비어있진 않은가 확인 m_length = std::strlen(source) + 1; m_data = new char[m_length]; // 배열 동적할당 for (int i = 0; i < m_length; ++i) m_data[i] = source[i]; m_data[m_length - 1] = '\0'; } ~MyString() { delete[] m_data; } char* getString() { return m_data; } int getLength() { return m_length; } }; int main() { MyString hello("Hello"); cout << (int*)hello.m_data << endl; cout << &(hello.m_data) << endl; cout << hello.getString() << endl; { MyString copy = hello; cout << (int*)copy.m_data << endl; cout << &(copy.m_data) << endl; cout << copy.getString() << endl; } cout << hello.getString() << endl; return 0; } 여기에서 cout << (int*)hello.m_data << endl; 과 cout << &(hello.m_data) << endl; 의 값이 다르게 출력되는 이유가 뭔지 궁금합니다.int main() { char name[] = "jack jack"; cout << (int*)name << endl; cout << &name << endl; }이렇게 했을 때는 두 주소값이 같게 찍히는데, 위의 경우와 어떻게 다른지 궁금합니다. 그리고 main함수에서 scope를 빠져나오고, cout << hello.getString() << endl; 했을 때, 저는 Hello 라고 잘 출력이 되는데, 이건 컴파일러와 다른건가요? (강의 영상 8분 22초에서 보여지는 결과와 다르게 나옵니다.)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 81p 예제코드 질문드립니다.
안녕하세요 큰돌님교안 81p 예제 코드를 그대로 복사하였는데 에러가 떠서요. 짧은 코드라서 캡쳐본으로 올리겠습니다.위에서 전역변수로 초기화하는 것까지 똑같이 했는데 왜 이런 오류가 뜨는 것인지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 79p vector 초기화 질문드립니다.
안녕하세요 큰돌님강의를 듣고 천천히 따라가고 있는데요, 강의 설명도 너무 이해되게 잘해주시고 교안도 잘 보고 있습니다.그런데 몇 가지 아쉬운 부분들이 있어서요..ㅠㅠc++을 처음 접하는데 가끔 예시코드를 봤을 때 설명 않고 넘어가시는 부분이 있기에 이해가 안될 때가 종종 있습니다.. ㅜㅜ 예를 들어 교안 79p에서vector<int> v{1, 2, 3};이 코드에서 지금 vector가 초기화가 어떻게 된 것인지 주석이라도 간략하게 달아주셨으면 좋겠는데 따로 찾아봐도 이거랑 비슷한 방식의 초기화를 잘 못찾겠어서요.. 제가 코드를 더 작성해서 저렇게 초기화된 건 v = {1, 2, 3}과 같다고 유추하였는데 맞을까요..?아직 교안 전부를 본 것은 아니라 뒤에 설명을 해주실지는 모르지만, 당장의 예제 코드를 이해하기 위해서 추가적으로 구글링하고 하는 부분들이 조금 시간이 소요되는 것 같습니다 그리고 다른 부분에서도, 교안에서 처음 push_back()이 언급됐을 때 문자하나씩밖에 더하지 못한다고 설명해주셨는데, split() 강의에서는 string 단위로 push_back(token) 해서 문자열이 추가되는 거 보고 혼란스럽기도 했습니다..ㅜㅜ 다르게 이해될 소지 없이 분명하게 설명해주셨으면 좋겠습니다..TrivallyCopyable도 그렇고,이런 UB같은 것도 그렇고 이미 알고 있을 거라고 생각하시고 넘어가시는 부분들에, 물론 중요한 설명을 빠뜨리신 것은 절대 아니지만 이런 작은 부분들이 모여서 제가 교안 외에 따로 검색을 하거나 찾는 부분이 잦게되다 보니, 시간도 걸리고 자꾸 흐름이 끊겨서요..시간이 걸리더라도 이러한 부분들에 대해서 간단한 주석이라도 설명해주시면 예제코드를 보았을 때 바로 이해하기가 더 좋을 것 같다는 생각이 들었습니다..! 큰돌님 유튜브도 잘 보고있고 이미 충분히 질 좋은 강의와 빠른 피드백으로 감사함이 참 많은데.. c++을 처음 접하는 사람들도 들을 수 있다고 하셔서, 이 강의 하나로 c++을 빠르게 공부할 목적으로 구매한 것이라 제 욕심이지만 말씀드립니다..ㅠㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R 질문있습니다!
#include <bits/stdc++.h> using namespace std; int n,a[52],k,ret; vector<int> adj[52]; bool b[52]; void cut(int node){ b[node] = false; for(int s : adj[node]){ cut(s); } } int main(){ //입력 받기 cin >> n; for(int i = 0; i < n; i++){ cin >> a[i]; if(a[i]!=-1) adj[a[i]].push_back(i); b[i] = true; } cin >> k; // 노드 삭제 cut(k); for(int i = 0; i < n; i++){ if(adj[i].size() == 0 && b[i] == true) ret++; } cout << ret; } //테스트 케이스 통과 but 틀림..제 코드에서 놓친게 무엇일까요..!현재 노드에서 이어진 것이 없고, 잘리지 않았다면 리프노드로 판단해서 수를 카운트 해주었는데 오답입니다
-
미해결홍정모의 따라하며 배우는 C++
함수와 변수에서 extern 키워드가 생략될때의 메커니즘 차이
안녕하세요, extern 키워드가 생략될때의 메커니즘이 함수와 변수에 차이가 있는 것 같은데 이해가 되지않아 질문드립니다. 우선 교수님께서 forward declaration 설명주실때,void doSomething(); 에서 앞에 extern 키워드가 생략된 것이라고, 변수도 똑같이 생략된것이라고 말씀주십니다. 하지만 제가 실험해본바로 변수는 좀 다른 것 같습니다.어떤 실험을 해봤냐면요,"Main.cpp""testGlobal.cpp"실행시키면 multiply definition 에러가 뜨는데요,Main.cpp 파일에서 g_testGlobal 을 선언할때 int로만 선언하는게 아닌 extern int로 선언하면 에러가 안뜹니다.만약 extern 키워드가 생략된 것이라는 교수님의 말씀이 맞다면, 왜 extern int g_testGlobal; 는 에러가 안뜨고 int g_testGlobal; 은 에러가 뜨는지 궁금합니다. 둘다 에러가 안떠야 extern 이 생략된게 맞지 않나요? 다음 실험도 봐보시면 좀 더 명확한데요,"Main.cpp""testGlobal.cpp" 파일에서이렇게 extern 키워드를 바꿔치기하면 또 빌드가 잘 됩니다.여기서는 하기 답변을 참고했을 때, 위 코드가 성공적으로 빌드되는 이유를 생각해봤는데요, https://www.inflearn.com/questions/102747/42-20-%EC%BD%94%EB%94%A9%EC%97%90-%EB%AC%B8%EC%A0%9C%EA%B0%80-%EC%97%86%EC%96%B4-%EB%B3%B4%EC%9D%B4%EB%8A%94%EB%8D%B0-%EB%B9%8C%EB%93%9C%EA%B0%80-%EC%95%88%EB%90%A9%EB%8B%88%EB%8B%A4 Main.cpp 에서 obj파일이 만들어질때 g_testGlobal 변수를 extern으로 선언했으므로 g_testGlobal 변수가 어딘가 저장되어있을거라는 정보를 컴파일러에게 건네주고, 그 값을 testGlobal.cpp 의 obj 파일이 링킹될때 건네 받아 사용하는것으로 이해했습니다.하지만 반대의 경우는 안되는 것이 이해가 가지 않습니다. 왜 두번째 경우에선 tetsGlobal.cpp에서 extern을 안써줘도 빌드가 되는지 모르겠습니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-O 질문있습니다!
#include <bits/stdc++.h> using namespace std; int main(){ string s; while(true){ getline(cin, s); if (s == ".") break; stack<char> stk = {}; for (char c : s) { if (c == ')' && stk.size() && stk.top() == '(') { stk.pop(); } else if (c == ']' && stk.size() && stk.top() == '[') { stk.pop(); } else if (c == '(' || c == '[') { stk.push(c); } else { continue; } } if (stk.empty()) { cout << "yes" << '\n'; } else { cout << "no" << '\n'; } } } 이 코드가 틀린 이유가 뭘까요..ㅠ 도저히 모르겠네요.그리고, 정답 풀이에서 check bool 변수가 하는 역할이 무엇일까요? 제 코드와의 차이가 check 플래그 변수가 없다는 것이 가장 큰 차이인 거 같은데 왜인지 모르겠습니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-L 질문 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님의 소스코드를 보면 int changeToInt(string a){ return atoi(a.substr(0, 2).c_str()) * 60 + atoi(a.substr(3, 2).c_str());}이렇게 되어 있는데 stoi()함수를 쓰면 c_str()을 안써도 되는 것으로 알고 있는데 atoi를 사용하는 이유가 있을까요??아니면 제가 잘못 알고 있는 걸까요...
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-L 질문있습니다.
안녕하세요 강사님, 강의 잘 듣고 있습니다.강사님의 코드를 보면서 궁금한 점이 있습니다.강사님 코드에 아래의 두 케이스를 대입했습니다. 490.10.10.1 40.10.10.19문제에서는 '한 개 이상의 연속된 수의 곱' 이니 위와 아래 케이스 다 9가 나와야 하는 것 같은데, 케이스 1은 0.9가 나오고 케이스 2는 9가 나왔습니다. 제가 문제를 잘못 이해한 것인가요?#include <bits/stdc++.h> using namespace std; int n; double psum[10001], a[10001], ret, b; // a[i] > b*a[i] 일 경우, 이전까지의 곱 b를 버리고 a[i]에서 곱셈을 시작한다. int main(){ cin >> n; for(int i = 0; i < n; i++) cin >> a[i]; double b = a[0]; for(int i = 1; i < n; i++){ cout<<"a["<<i<<"] = "<<a[i]<<" b = "<<b*a[i]<<"\n"; if(a[i] > b * a[i])b = a[i]; else b *= a[i]; ret = max(b, ret); } ret = round(ret*1000)/1000; printf("%.3lf", ret); return 0; }
-
미해결홍정모의 따라하며 배우는 C++
6.9 연습문제 의도대로 한게 맞는건가요..?
결과는 잘 나오는디..교수님 의도대로 한거인지를 모르겠어요.