inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

2-R 질문있습니다!

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

#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++
  • 코딩-테스트
댓글 1 좋아요 0 조회수 182

함수와 변수에서 extern 키워드가 생략될때의 메커니즘 차이

미해결

홍정모의 따라하며 배우는 C++

안녕하세요, 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을 안써줘도 빌드가 되는지 모르겠습니다. 감사합니다.

  • c++
정진호 댓글 1 좋아요 1 조회수 503

2-O 질문있습니다!

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

#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 플래그 변수가 없다는 것이 가장 큰 차이인 거 같은데 왜인지 모르겠습니다..

  • c++
  • 코딩-테스트
댓글 2 좋아요 0 조회수 228

2-L 질문 있습니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 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를 사용하는 이유가 있을까요??아니면 제가 잘못 알고 있는 걸까요...

  • c++
  • 코딩-테스트
정윤교 댓글 1 좋아요 0 조회수 162

6-L 질문있습니다.

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 강사님, 강의 잘 듣고 있습니다. 강사님의 코드를 보면서 궁금한 점이 있습니다. 강사님 코드에 아래의 두 케이스를 대입했습니다. 4 9 0.1 0.1 0.1 4 0.1 0.1 0.1 9 문제에서는 '한 개 이상의 연속된 수의 곱' 이니 위와 아래 케이스 다 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++
  • 코딩-테스트
lego0313 댓글 2 좋아요 0 조회수 281

dfs 시간복잡도 질문

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 큰돌님, 강의 잘 듣고 있습니다. 간선리스트로 구현된 그래프에 dfs를 적용할 경우, 시간복잡도는 O(|V|+|E|)로 알고 있습니다. 만약, 주어진 그래프에서 각 노드가 4방향으로 간선이 뻗어있을 경우, 아래와 같은 방식으로 탐색을 이어나갑니다. int mv[4][2]={{0,1},{0,-1},{1,0},{-1,0}} for(int i=0; i<4; i++;) { int ny = y+mv[i][0] int nx = x+mv[i][1] } 이때, 노드 개수를 V개면, 간선의 개수는 각 노드 별로 4개니까, |E|=|V|*4로 계산해서, 시간복잡도는 O(|V|*5) 인가요?

  • c++
  • 코딩-테스트
lego0313 댓글 2 좋아요 0 조회수 509

백트래킹을 사용하는 경우 질문

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 강사님, 강의 잘 듣고 있습니다. 백트래킹은 완전탐색시 탐색하지 않아도 되는 부분은 건너뛰는 기능을 한다고 알고 있습니다. 백트래킹은 기본적으로 완전탐색의 연산량을 줄여주는 역할을 한다는 것인데, 완전탐색으로 풀면 시간초과가 나는 문제를, 백트래킹을 적용해서 풀면 시간초과가 나지 않는 건 어떻게 판단할 수 있나요? 완전탐색에 백트래킹을 적용해도 시간초과가 나는 경우에는 지체없이 다른 풀이법을 찾아야 하나요?

  • c++
  • 코딩-테스트
lego0313 댓글 2 좋아요 0 조회수 456

4-L 시간복잡도 질문

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 강사님, 강의 잘 듣고 있습니다. AC처럼 테스트케이스가 여러 개 주어질 경우, 제한 시간은 어떻게 고려해야 하는지 질문드리고 싶습니다. 예를 들어, 주어진 문제의 제한 시간이 1초라면, 테스트 케이스를 다 합해서 1초 안에 처리해야 하는 건지, 아니면, 각 케이스를 1초 안에 처리해야 하는 건지 궁금합니다.

  • c++
  • 코딩-테스트
lego0313 댓글 2 좋아요 0 조회수 252

조합 시간복잡도 질문

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 강사님, 강의 잘 듣고 있습니다. 조합을 구하는 함수의 시간복잡도에 대해 질문 드리고 싶습니다. // Online C++ compiler to run C++ program online #include <iostream> #include <vector> using namespace std; int r=0; vector<int> t; int cnt=0; int forcount=0; void combi(int idx) { if(t.size()==r) { cnt++; return; } for(int i=idx; i<=10; i++) { forcount++; t.push_back(i); func(i+1); t.pop_back(); } } int main() { // Write C++ code here while(true){ cnt=0; forcount=0; cin>>r; func(1); cout<<"cnt = "<<cnt<<"\n"; cout<<"forcount = "<<forcount; } return 0; } 조합 함수의 시간복잡도는 O(nCr), 위의 함수에서는 cnt의 값이라고 알고 있습니다. 그런데, 시간복잡도는 주어진 입력의 크기에 대한 연산의 총합이라고 알고 있습니다. 그러면, combi 함수의 for문 연산의 수인 forcount도 고려해야 하지 않나요? 왜? cnt만 고려해도 되는지 궁금합니다.

  • c++
  • 코딩-테스트
lego0313 댓글 2 좋아요 0 조회수 579

리턴 값으로 초기화 시 복사 생성자 호출이 안됩니다.

미해결

홍정모의 따라하며 배우는 C++

#include<iostream> #include<cassert> using namespace std; class Fraction { private: int m_numerator; int m_dominator; public: Fraction(int numerator, int dominator) :m_numerator(numerator), m_dominator(dominator) { assert(dominator != 0); } Fraction(const Fraction& fraction) :m_numerator(fraction.m_numerator) , m_dominator(fraction.m_dominator) { assert(fraction.m_dominator != 0); cout << "Copied" << endl; } friend std::ostream & operator << (std::ostream& out, const Fraction& fr) { out << fr.m_numerator << " / " << fr.m_dominator << endl; return out; } }; Fraction doSomething() { Fraction temp(1, 2); cout << &temp << endl; return temp; } int main() { //return값 복사 Fraction fr = doSomething(); cout << &fr << endl; return 0; } 위 코드에서 복사 생성자를 호출하지 않는 이유는 뭘까요? 사용환경에 따라서 rvo를 시켜주는건가요??

  • c++
지우 댓글 1 좋아요 2 조회수 226

9.12 강의 마지막에 내주신 숙제가 잘 이해가 안갑니다.

해결됨

홍정모의 따라하며 배우는 C++

대입연산자를 오버로딩 해보라고 말씀하셨는데 대입연산자를 이용해서 이니셜라이저리스트로 클래스를 생성해보란 말씀이신가요? 근데 그건 이미 교수님이 강의 마지막에 되는걸 보여주신거 아닌가요?

  • c++
안규철 댓글 1 좋아요 1 조회수 279

기존 C++ 시리즈와 현재시리즈중 우선순위

미해결

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] 와 비교해서 현재 시리즈를 먼저 진행하고 하는것이 알맞은 순서일까요? 이전 C++ 언리얼 MMO 과정에는 어셈블리도 다루고 좀더 딥하게 다루던걸로 기억해서 여쭈어봅니다

  • c++
  • 네트워크
  • ue-blueprint
  • 게임수학
  • windows-api
김망 댓글 1 좋아요 0 조회수 481

3.3 강의 후위 연산 질문

미해결

홍정모의 따라하며 배우는 C++

먼저 강의 정말 유익하게 잘 보았습니다. 본론으로 들어가면 선생님께서는 전위 연산을 사용하였더니 4라는 결과가 나왔지만 후위 연산을 사용하니깐 결과값이 3이 나왔습니다. 여기서 a는 2가 되는 것이 이해가 되지만 b는 왜 1이 되는지 의문이여서 질문글을 남깁니다.

  • c++
원인석 댓글 1 좋아요 1 조회수 216

강의 20:30에서 GameObject.h을 pch.h에서 헤더로 선언하지 않은 이유?

미해결

[게임 프로그래머 도약반] DirectX11 입문

안녕하세요 선생님, 강의를 듣다가 궁금증이 생겨 질문 남깁니다.강의의 20:30 부분에서 다른 클래스들과는 달리 GameObject 클래스는 왜 pch.h 파일에 헤더로 선언하여 사용하지 않는 것인지 궁금합니다.

  • c++
  • directx
댓글 1 좋아요 0 조회수 304

2-T. 번 강의 질문 스택 풀이시 시간복잡도

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요. 강의 잘듣고잇습니다. 단순하게 풀엇을떄 2중 forloop 시간복잡도 O(N^2) . 시간초과 발생하였습니다. 스택 풀이로 하면 통과는 하게되는데, 시간복잡도는 여전히 O(N^2). 인 것 아닌가요?

  • c++
  • 코딩-테스트
윽쓰욱스 댓글 3 좋아요 0 조회수 343

제 코드에서 잘못된 부분을 알고 싶습니다!

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 선생님, http://boj.kr/eabdc120ede54df9bf4da138381baa63 2870 번 수학숙제 문제를 풀어봤습니다. 입력받은 문자열에서 알파벳은 모두 '*' 로 바꾸고, 변경된 문자열을 토대로 재귀 함수를 이용하여 정수 부분을 추출하려고 하였으나, 어째서인지 문자열의 첫 번째 정수만 출력되고, 두번째 정수는 출력되지 않습니다. 예를들어, "lo3za4" 라는 입력값이 들어가면, 출력으로 첫 번째 정수인 3만 출력되고, 4는 출력되지 않습니다. 어느 부분에서 어떤 실수가 있는지 알려주시면 감사하겠습니다. 좋은 강의 늘 감사드립니다.

  • c++
  • 코딩-테스트
김영수 댓글 1 좋아요 0 조회수 251

4-C 질문

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 큰돌님 조금 다른 로직으로 풀었는데 TC랑 반례들 다 적용해보아도 다 통과되는데 제출하면 틀렸다고 해서 제가 어느부분을 놓친건지 질문드립니다. 전역변수 저는 연결정보를 다음과 같이 map과 set을 활용하였습니다. const int INF = 987654321; int n{}; int arPopular[15]{}; // 각 구의 인원수 저장 용도 map<int, set<int>> graph{}; // Key : 구. Value : 해당 구랑 연결된 구들 int minDiff = INF; // 나눠진 두 구의 최소 인원수 차이 구현 함수 프로토타입 // Gu - FindNode 가 서로 연결되어 있는지 여부 bool IsConnect(int Gu, int FindNode); // 하나의 구역이 끊김 없이 연결될 수 있는지 bool IsAreaConnected(const vector<int>& Area); // 인구수 차이 구해오기 int GetDifPop(const vector<int>& Area1, const vector<int>& Area2); 일단 저의 로직 순서는 다음과 같습니다. 비트마스킹으로 모든 경우의 수를 탐색한다. 각 경우의 수마다 비트가 0이면 vector1에다가, 1이면 vector2에다가 넣어준다. 여기까지 되었으면 일단 두 그룹으로 나뉘어진다. 각 그룹에 대해서 Union Find 알고리즘을 적용해서 서로 끊기지 않고 연결될 수 있는지 확인한다. 만약 두 그룹 모두 끊기지 않고 연결될 수 있다면 우리가 원하는 2개의 구역으로 나눈것이다. 이하 최소 찾는 로직부터는 동일. 코드 링크는 여기있습니다! http://boj.kr/bbe484bd863f42fbba08a1e48b55dad2

  • c++
  • 코딩-테스트
Park SungEun 댓글 1 좋아요 0 조회수 236

1-H 질문 있습니다!

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

선생님 안녕하세요 ! 제가 푼 문제 코드는 다음과 같습니다. http://boj.kr/3475d11fa8a2499bba282e226bdc5e92 제가 풀었을 떄는 시간초과가 났었습니다. 여기서 여쭤볼 것이 있습니다. Q1. 제가 작성한 코드에서 시간 복잡도를 계산할 떄 최악의 수를 생각하고 계산을 합니다. N이 100,000이고 K는 1일 떄 제가 작성한 코드는 대략 3N의 시간복잡도가 나오는 것으로 계산하였습니다. 또한 선생님의 풀이를 저는 2N의 시간복잡도로 생각을 합니다. 그러면 만일 실전에서 제가 작성한 3N이 시간 초과가 뜬다면 2N으로 줄일 방안을 생각하는 것이 맞을까요?!?

  • c++
  • 코딩-테스트
sangwoo8221 댓글 1 좋아요 0 조회수 275

4-A 질문입니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 큰돌님. 모든 경우의 수 탐색 과정에서 궁금한게 있어서 질문드립니다. 모든 경우의 수를 탐색하기 + 각 경우의 수에서 합 구하기 를위해 다음과 같은 코드가 구현되는 것은 이해했습니다. for (int i = 1; i < (1 << n); i++) { // i는 모든 경우의 수에서 각 케이스이다. for (int j = 0; j < n; j++) { // i에 해당하는 경우의 수에서 합 구하기위함 if(i & (1<<j)) } } 여기서 질문드리고싶은게 for문에서 i=1 부터 시작하는 이유가 i=0. 즉, 하나도 안고르는 경우는 탐색할 필요가 없기 때문인가요?

  • c++
  • 코딩-테스트
Park SungEun 댓글 1 좋아요 0 조회수 167

인기 태그

인프런 TOP Writers

주간 인기글