inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

mod11 개념문제 질문에 이어 추가 질문입니다.

미해결

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

선생님께서 추가적으로 답변해주신 것을 늦게 확인하였습니다. 아마 선생님께서도 제가 추가로 답변한 것을 확인하시지 못하신 것 같아서 추가로 커뮤니티에 질문드립니다. 선생님이 추가로 답변해주신 마지막 답변에서 "idx 0인 경우를 포함하지 않는 경우는 체크하지 않게 되기 때문"이라는 부분을 읽고 깨우친 것 같습니다. 완전탐색과 백트래킹을 사용하는 경우의 차이를 알게 된 것 같습니다. 제가 이해하기로는 완전탐색 -> 해당 상황마다 이 경우를 포함하는지 안하는지를 전부 따져가며 경우를 모두 구함 백트래킹 -> 한 지점이 고정이고 그 지점부터 목적지까지 가는 모든 경로 or 전체 중 몇가지를 고르는 문제와 같이 "무조건 첫번째(경로 문제에서는 첫 지점 고정, 몇가지를 고르는 경우 문제에서는 무조건 처음 한가지를 고르고 다음 순서로 넘어가는 것)를 포함"하는 상황 이런 상황별로 완전탐색과 백트래킹을 푸는 경우가 나뉘는 걸로 이해되었는데 맞을까요? 답변 주신 후에 이 글은 이전 질문과 이어지는 것이기 때문에 삭제하겠습니다!

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

시간초과 이유가 궁금합니다.

해결됨

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

실패 http://boj.kr/07dc01c4e7c2492580934f84b3f2c8af 성공 http://boj.kr/6d68ec80a15341a09987a0a32f32fc8f deque 하나만 써서 풀었습니다. BFS로 탐색하면서 빈공간이면 push_front, 친구를 만나서 멈춰야하면 push_back을 했고 각각 visit값을 동결, +1 해줬습니다. 그리고 목표지점에 도착했을 때 끝냈습니다. 실패한 코드와 성공한 코드의 차이점은 하나 입니다. 시작지점의 visit값을 0으로 뒀는가 (미방문은 모두 0) 아니면 1로 두고 시작했는가 (첫 시작점의 visit을 1로 둔 것) 둘 다 결과는 잘 나옵니다 (예제가 적어서 테스트할 게 적지만 bfs로 탐색하는거 따라가보면 제대로 작동합니다.) 하지만 시작지점의 visit을 0으로 뒀을 때는 귀신같이 시간초과가 나게 됩니다..; 개인적으론 이런 알 수 없는(?) 시간초과나 메모리초과 때문에 백준이 너무너무 싫은데요 ㅠ 혹시 이것도 제가 생각못한 다른 이유가 있어서 시간초과가 뜬건지.. 궁금합니다. cin,cout 입출력 동기화는 쓰지 않았습니다만 인간적으로 그런걸로 정답/오답이 갈리는건 문제가 문제있다고 생각됩니다 (화가 나서 그런거 맞습니다 흑흑)

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

반복문 안에 선언

해결됨

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

안녕하세요. 반복문 안에 선언을 할 경우 매번 메모리가 회수되고 할당되나요? 메모리의 할당과 회수는 운영체제가 관여한다고 알고 있는데, 위와 같은 경우 성능에 좋지 못한 영향을 줄 것 같습니다. 만약 제가 컴파일러라면 반복문 안에 선언할 경우 이를 파악해 메모리를 회수하지 않고 반복문을 빠져나갈 때 회수할 것 같습니다. 실제로 컴파일러도 이렇게 동작하는지, 만약 아니라면 반복문 외부에 캐싱하는 것이 유의미한 일인지도 궁금합니다.

  • c++
king 댓글 1 좋아요 1 조회수 331

블록 내에서 선언한 vector를 이차원 vector에 넣었을 때

해결됨

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

블록 안에서 선언한 vector은 블록 밖으로 나가면 회수되는 것으로 알고 있습니다. 그런데 만약 이 vector를 블록 밖에서 선언한 이차원 vector에 넣었을 때 어떻게 되나요? 실행은 잘 되는데 이게 컴파일러가 길이를 유지시켜주는 건지, 아니면 이차원 vector에 복사되는 것인지 궁금합니다. vector<vector<int>> wheelList(NUMBER ); //caching { vector<int> wheel(SIZE); string temp; for(int i = 0; i < 4; i++){ cin >> temp; for(int j = 0; j < NUMBER; j++){ wheel[j] = temp[8 - j - 1] - '0'; } wheelList[i] = wheel; } }

  • c++
king 댓글 1 좋아요 1 조회수 185

"board에 쓰는 동안 버퍼 오버런이 발생했습니다"

미해결

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

안녕하세요 달팽이 문제를 푸는데 답은 잘 나옵니다 그런데 SetBoard함수의 board[y][x] = i 이 부분에서 "board에 쓰는 동안 버퍼 오버런이 발생했습니다"라는 경고가 나옵니다 이러한 경고가 왜 뜨는지와 이 경고를 해결하려면 어떻게 코드를 수정해야 하는지 알 수 있을까요? 코드링크: http://boj.kr/d69d82f1e84c49da942ec7948ab48529

  • c++
  • 네트워크
  • ue-blueprint
  • 게임수학
  • windows-api
toyboy0113 댓글 2 좋아요 0 조회수 941

2-S dp 배열을 좀 더 이용해보려고 코드를 바꿔봤는데 틀렸습니다가 나오네요

해결됨

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

아래는 맞는 코드입니다. http://boj.kr/1b13bda362154df9b5be8a26cad57c96 이 코드를 개선해보려고 아래와 같이 코드를 짜보니 틀렸습니다가 나오네요. http://boj.kr/a6cbb7ca3b214df386ebb96214bc2785 dp를 아직 잘 모르는데 선생님의 풀이를 보고 조금 더 횟수를 줄일 수 있지 않을까 해서 한번 바꿔봤는데요. 맞왜틀에 빠졌습니다... 도저히 혼자서는 이유를 찾을 수 없어서 질문드립니다!

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

7-T 질문이 있습니다

해결됨

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

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/64dbaea1720740bd91f3d12c2ccee13a 원래 코드를 변형을 해봤는데 왠지는 모르겠지만 틀려서 왜 틀렸는지 몰라서 질문을 드립니다. 예제 입력까지는 맞았습니다. 바뀐 부분은 원래는 main함수에서 go함수를 호출할 때 a[0]를 먼저 sum에 더해놓고 가는데, 제가 바꾼 코드에서는 a[0]를 더하지 않고 호출하는 부분에서 해당하는 idx의 a[idx]를 더했고 기저 조건도 idx-2에서 리턴하는 게 아닌 idx-1에서 리턴하게 두었습니다. 감사합니다.

  • c++
  • 코딩-테스트
성우 댓글 1 좋아요 0 조회수 178

6-개념강의 2792번 질문있습니다

미해결

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

http://boj.kr/ecb460dd765d43ae81d5747be4e066d2 이분탐색이 전체에서 /2단위로 줄여서 루트2단위로 줄어들어 시간복잡도를 줄이려는 탐색방법인것까지는 이해가 가는데 mid를 지정해놓고 mid-1, mid+1 mid 이부분을 l, r, 각각 지정하는부분이 문제마다 헷갈려서 잘 이해가 안가네요 ㅜㅜ 예전에도 비슷한문제로 머리가아팠던거같은데 설명해주시면감사하겠습니다

  • c++
  • 코딩-테스트
이선용 댓글 1 좋아요 0 조회수 312

우분투에서 c++ 프로그램

미해결

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

운영체제를 우분투 쓰고 있는데 c++ 프로그램으로 vscode로 괜찮은가요?

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

대략 7분부터 작성하시는 Calc클래스에서

미해결

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

}Calc(int init_value) : m_value(init_value) {} Calc& add(int value) { m_value += value; return *this; } Calc& sub(int value) { m_value -= value; return *this; } Calc& mult(int value) { m_value *= value; return *this; } Calc& add, Calc& sub ,Calc& mult에서 &를 지워도 오류가 안나더라구요 Calc add(int value) { m_value += value; return *this; } Calc sub(int value) { m_value -= value; return *this; } Calc mult(int value) { m_value *= value; return *this; } &만 지우고 int main() { { Calc cal=10; cal.add(10).sub(1).mult(2).print(); //38 cal.add(1).print();//21 return 0; } }; 돌렸는데 38로 값이 똑같이 나왔어요 차이가 뭐지? 생각이 들어서 add를 한번 더 했는데 21이 나오더라구요 디버깅해보니까 20으로 시작하는 걸로 나오는데 이유를 모르겠어서요 차이가 뭘까요?

  • c++
gcckzk 댓글 1 좋아요 1 조회수 341

3-A combi 메소드 시작 인덱스에 따른 시간초과 이유

해결됨

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

안녕하세요 큰돌님! 다름이 아니라, combi 메소드를 생성할 때, for (int i = start; i < chicken.size(); i++) { arrayList.add(i); combi(i); arrayList.remove(arrayList.size() - 1); } 이 부분에서 starting index를 0으로 하면 시간초과가 나는 반면, starting index를 -1로 설정한 후 for (int i = start + 1; i < chicken.size(); i++) {/*...*/} 이런 식으로 작성하면 문제없이 통과됩니다. -1에서부터 인덱스를 시작하면 combi 메소드를 호출하는 횟수가 0에서 시작하는 것보다 상당한 차이로 줄어드는데 혹시 그러한 이유를 알 수 있을까요..? 혹시 combi 내에서 호출할 때에 for문에서 int i의 시작점이 변화 없이 그대로 진행되기 때문일까요.. 감사합니다!

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

4-F 시간초과 질문드립니다!

미해결

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

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/3ab039616a084231ae90581c8e7d1ba8 비트마스킹과 백트래킹을 이용해 풀이해봤으나 시간이 초과되어 어떤 효율적이지 못한 부분이 있는지 궁금해 질문드립니다. 풀이 아이디어는 전수조사를 할때, 어차피 26개중 K를 모두 배운 경우가 K개보다 적게 배운 경우보다 읽을 수 있는 단어가 많거나 같을 것이기 때문에 21개 중 K-5개의 알파뱃을 고르는 경우를 백트래킹을 이용해 찾으면 그것이 더 효율적이지 않을까 생각되어 시도해보았습니다.

  • c++
  • 코딩-테스트
권창덕 댓글 2 좋아요 0 조회수 396

extern 질문

미해결

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

//test.cpp #include <iostream> using namespace std; static int g_a = 1; // forawrad declaration void doSomething(); // == extern void doSomething(); extern int a; int main() { doSomething(); cout << a << endl; return 0; } // test2.cpp #include <iostream> int a = 10; void doSomething() { using namespace std; cout << "Hello" << endl; } 다음 코드 중 test.cpp 파일에서 void doSomething(); 같은 경우는 extern void doSomething(); 이렇게 extern 을 붙이든 말든 똑같이 잘 작동합니다. 하지만 extern int a; 의 경우에는 extern 없이 int a; 이렇게만 하면 linker error가 나옵니다. 이유가 궁금해요. 다음은 해당 linker error 입니다. 현재 맥북 프로 사용 중이며 arm64입니다. VS code로 std=c++17 컴파일 했습니다. duplicate symbol '_a' in: /var/folders/js/x_hy51p16_x1jsv90sbbh7mw0000gn/T/test-06a7e1.o /var/folders/js/x_hy51p16_x1jsv90sbbh7mw0000gn/T/test2-9147ce.o ld: 1 duplicate symbol for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

  • c++
엄태용 댓글 1 좋아요 1 조회수 270

함수 호출과정 질문입니다

미해결

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

안녕하세요. 배운 내용을 다시 공부하면서 실행해본 결과입니다. 함수 호출시에 232바이트만큼 rsp를 이동시키고 rbp를 32바이트만큼 빼서 스택프레임당 32byte와 200byte의 여백을 남기는것을 확인했습니다. 컴파일러가 컴파일시에 스택 사이즈를 정하고 저장하는 위치가 어디인지 궁금합니다. (예를들어 스택프레임은 32byte고 중간에 카나리(?)는 200byte라는걸 결정하면, os는 프로그램 실행시 해당 정보를 어떻게 알 수 있나요?)

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

7 - K 문제 질문입니다.

해결됨

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

좋은강의 감사합니다 선생님! 해당 문제에 똑같은 질문이 있었는데 이해가 되지 않아서 질문드립니다.. 메모이제이션 부분에 int &ret = dp[y][x][cnt][prev]; if (ret != -1) return ret; ret = 0; 에서 ret = 0; 으로 초기화하는 이유를 모르겠습니다. 질문 답변에서는 리프노드에서 -1을 return 하면 안되기 때문에 초기화를 해주어야 한다고 하셨는데, 리프노드에서는 기저사례에 걸리기 때문에 반드시 1 아니면 0을 리턴해주지 않나요? 그래서 ret = 0을 초기화 해주지 않아도 0 또는 1을 반환되는것을 더하여 넘겨주는 것으로 이해하고 있는데 어떤 부분을 놓치고 있는지 잘 모르겠습니다ㅠㅠ ret = 0부분을 주석처리하고 예제 입력을 넣었을 때 예제2) 6 4 2 5 3 3 2 이 입력만 정답과 다른답이 나옵니다.

  • c++
  • 코딩-테스트
이명운 댓글 1 좋아요 0 조회수 309

vector resize() 질문.

미해결

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

이 코드에서의 결과값은 #include <iostream> #include <vector> using namespace std; int main() { std::vector<int> v = {7, 8, 9}; for (auto &e : v) { cout << e << " "; } cout << endl; cout << "v.size() " << v.size() << endl; cout << "v.capacity() " << v.capacity() << endl; v.resize(2); cout << "v.size() " << v.size() << endl; cout << "v.capacity() " << v.capacity() << endl; //v.resize(5); // cout << v[2] << endl; // XXX // cout << v.at(2) << endl; // XXX int *ptr = v.data(); cout << ptr[2] << endl; return 0; } 7 8 9 v.size() 3 v.capacity() 3 v.size() 2 v.capacity() 3 9 이렇게 예상했던 것처럼 잘 나옵니다. 하지만 다시 resize(5)를 하면, #include <iostream> #include <vector> using namespace std; int main() { std::vector<int> v = {7, 8, 9}; for (auto &e : v) { cout << e << " "; } cout << endl; cout << "v.size() " << v.size() << endl; cout << "v.capacity() " << v.capacity() << endl; v.resize(2); cout << "v.size() " << v.size() << endl; cout << "v.capacity() " << v.capacity() << endl; v.resize(5); cout << "v.size() " << v.size() << endl; cout << "v.capacity() " << v.capacity() << endl; // cout << v[2] << endl; // XXX // cout << v.at(2) << endl; // XXX int *ptr = v.data(); cout << ptr[2] << endl; return 0; } 7 8 9 v.size() 3 v.capacity() 3 v.size() 2 v.capacity() 3 v.size() 5 v.capacity() 6 0 결과값이 이렇게 나오게 되는데 ptr[2]의 값이 왜 0이 되는지, capacity의 값이 6이 되는지 모르겠습니다.. 맥북 m1 pro 사용 중이고, VS Code 사용, g++ -std=c++17로 컴파일 했습니다!

  • c++
엄태용 댓글 1 좋아요 1 조회수 451

3-B bfs를 반환형을 int로 해서 풀려고 하는데 틀립니다.

해결됨

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

http://boj.kr/d137e4b306b742969928aca1cf5ed00f 선생님 안녕하세요. 풀이과정과 다르게 bfs반환형을 int로 만들어 풀려고 했지만 통과되지가 않습니다. 풀이랑 비교해도 비슷한거 같은데 다른부분을 잘 모르겠습니다.

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

2%만 맞고 틀리네요..

해결됨

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

https://www.acmicpc.net/source/67720015 제 알고리즘에 강사님코드를 추가했습니다. bfs를 main에서 사용할 생각을 처음엔 못하고 불의위치만 bfs코드를 따로 떼어내서 구현한 것 빼고는 비슷합니다..

  • c++
  • 코딩-테스트
매버릭 댓글 1 좋아요 0 조회수 339

2.5부동소수점수(29분:43초) isnan 함수

해결됨

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

안녕하세요. 아래의 코드에서 isnan(posinf)는 왜 1이 나오고, isnan(neginf)는 왜 0이 나오는 지 모르겠습니다. posinf는 양의 무한대로 발산하고, neginf는 음의 무한대로 발산하는 것 아닌가요? 왜 둘의 결괏값이 다른 건지 이해가 가지 않는데, 자세한 설명해주시면 정말 감사하겠습니다. #include <iostream> #include <iomanip> #include <limits> #include <cmath> using namespace std; int main() { double zero = 0.0; double posinf = 5.0 / zero; double neginf = - 5.0 / zero; cout << std::isnan(posinf) << endl; cout << std::isnan(neginf) << endl; }

  • c++
김민진 댓글 1 좋아요 2 조회수 433

인기 태그

인프런 TOP Writers

주간 인기글