inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

2-E 분할 정복 반례를 도저히 못찾겠어요

해결됨

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

안녕하세요 큰돌님. 2-E 쿼드 트리 문제 반례를 도저히 못찾겠습니다. 97% 쯤인가 여기서 자꾸 실패가 떠요.백준 질문 게시판에 올라가있는 테스트 케이스를 넣어도 다 통과는 하는데 무슨 반례에 걸리는지 도무지 감이 안잡힙니다. 한번 봐주실 수 있나요? #include <bits/stdc++.h> using namespace std; int N, adj[70][70]; string input; string go(int sy, int sx, int size) { int ey = sy + (size - 1); int ex = sx + (size - 1); // cout << sy << " " << sx << " " << ey << " " << ex << '\n'; if (size == 2) { if (adj[sy][sx] == adj[sy][ex] && adj[sy][ex] == adj[ey][sx] && adj[ey][sx] == adj[ey][ex] && N > 2) return to_string(adj[sy][sx]); string subret = "("; subret += to_string(adj[sy][sx]); subret += to_string(adj[sy][ex]); subret += to_string(adj[ey][sx]); subret += to_string(adj[ey][ex]); subret += ")"; return subret; } string lt = go(sy, sx, size / 2); string rt = go(sy, sx + size / 2, size / 2); string lb = go(sy + size / 2, sx, size / 2); string rb = go(sy + size / 2, sx + size / 2, size / 2); // cout << "lt: " << lt << " rt: " << rt << " lb: " << lb << " rb: " << rb << '\n'; if (lt.size() == 1 && lt == rt && rt == lb && lb == rb && N > 2) return lt; string ret = "("; ret += lt; ret += rt; ret += lb; ret += rb; ret += ")"; return ret; } int main() { cin >> N; for (int i = 0; i < N; ++i) { cin >> input; for (int j = 0; j < N; ++j) { adj[i][j] = input[j] - '0'; } } string ret = ""; if (N == 1) ret = "1"; else { ret = go(0, 0, N); } cout << ret << '\n'; return 0; }

  • c++
  • 코딩-테스트
박희천 댓글 2 좋아요 0 조회수 265

dll 파일과 name mangling 관련 질문드립니다.

해결됨

C개발자를 위한 최소한의 C++

안녕하세요. 강의 잘 보고 있습니다. 강의를 보는데 갑자기 궁금한 것이 생겨서 질문 드립니다. exe 파일에서 필요할 때마다 dll을 참조하여 호출하는 것으로 이해하고 있습니다. dll엔 이미 함수 symbol이 정의되어 있겠죠. 예를 들어 add(int a, int b) 함수를 dll로 만들었다고 가정하면 일반적인 c라면 함수 심볼이 _add라고 예상되지만, C++ 이라면 _add가 아니라 다른 형태의 심볼이 만들어질거라 생각이 됩니다. 그런데 exe을 만드는 개발자 입장에서 생각해보면 무엇으로 만들어질지 모르는 심볼을 예측할 수 없으니 c처럼 _add와 같이 확실한 symbol을 선호할 것 같은데, 그러면 dll 파일을 c++로 만들 때 함수 앞에 extern "C" 키워드를 사용하나요? 만약 1번 답이 맞다면 추가로 궁금한 것이 있습니다. 제가 알기론 C와 C++의 차이가 name mangling 뿐만 아니라 스택에 쌓이는 매개변수도 차이가 있다고 들었습니다. 그런데 C++로 만드는 exe 파일과 extern "C"로 선언한 dll을 같이 사용하면 문제가 생기지 않나요? 부족한 것이 많아 질문에 오류가 있을 수 있습니다. 제가 잘못 알고 있는 부분은 피드백 주신다면 다시 공부하겠습니다. 감사합니다.

  • c++
  • microsoft-windows
  • 객체지향
  • 디자인-패턴
김상현 댓글 2 좋아요 0 조회수 473

friend 키워드에 대한 개념이 안잡힙니다.

미해결

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

안녕하세요. 아래와 같은 코드가 있다고 가정했을때, 첫번째 operator(friend 키워드가 없는)는 에러표시를 하고 두번째 operator(friend 키워드가 있는)는 정상 컴파일이 됩니다. friend 키워드에 대한 강의도 앞에서 보았고, 'private 멤버 함수에 대한 접근이 가능하도록 해준다' 는 생각과 operator 코드 작성간의 상관관계가 무엇인지 모르겠습니다 ㅠ // 아래 함수 정의에선 해당 오퍼레이터 함수에 인자값이 너무 많다고 하고, std::ostream& operator << (std::ostream &out, const Point& point) { } // friend 키워드를 붙일경우엔 정상 컴파일이 됩니다. friend std::ostream& operator << (std::ostream &out, const Point& point) { }

  • c++
꿀렁꿀렁 댓글 1 좋아요 2 조회수 277

스크립트 오류 참조형(변하지 않는 포인터)

해결됨

C개발자를 위한 최소한의 C++

10:00 경 "근데 지금 값이 참조자인 ref에 들어있는 값하고 요놈하고 똑같죠. 네 그래서 여기에다 대고 그래서 간접지정해서 30 이러면은 F10키 눌러 보면 여기 데이터의 값이 바뀌는 걸 보실 수가 있죠? 네 데이터 출력하면 당연히 30이 나오겠네요. 해서 여러분이 지금까지 이만큼의 내용을 보셔서 아시겠지만 참조자라고 하는 것은 개념적인 표현이고 참조자의 실체는 포인터랑 똑같이 구현이 돼요. 그래서 기계어 수준으로 내려가서 쫓아가 보면은 결과적으로는 그렇다. 그래서 참고하시기 바랍니다. 아, 참조자 이런 거구나." 인데 이게 스크립트에서 이상하게 표시가 됩니다. 처리 부탁드릴게요. 고맙습니다!

  • c++
  • microsoft-windows
  • 객체지향
  • 디자인-패턴
김민우 댓글 2 좋아요 0 조회수 308

스크립트 오류

해결됨

C개발자를 위한 최소한의 C++

7:38초 경 텍스트가 그러면 그거랑 5랑 더해서 연산의 임시결과가 떨어졌겠죠 그게 15가 저장되어 있는 integer 인스턴스일텐데, 사라져야 될 운명이었으나 거기에다 이름을 부여한거죠. 인데 수정 제안할랬더니 길어서 짤리네요. 관리자분께서 스크립트 시간 자른 후 나눠서 바꿔주셔야 할 것 같아요. 지난 시간 것도 유사한 게 있었어요. 통으로 날아가 있어서... 조치 부탁드립니다! 노트 필기하는 마음으로 스크립트 수정 중입니다. ㅎㅎ

  • c++
  • microsoft-windows
  • 객체지향
  • 디자인-패턴
김민우 댓글 1 좋아요 0 조회수 246

StringLiteral에서 [N]은 어떻게 동작되는건가요?

미해결

C++20 훑어보기

안녕하세요 강의를 보다가 궁금한 점이 생겨서 질문드려요 template<int N> class StringLiteral { public: constexpr StringLiteral(char const (&str)[N]) { std::copy(str, str+N, _data); } char _data[N]; }; template<StringLiteral str> class ClassTemplate { }; template<StringLiteral str> void FunctionTemplate() { cout << str._data << endl; } int main() { ClassTemplate<"Hello World"> cls1; FunctionTemplate<"Hello World">(); return 0; } 위 코드에서 [N]은 자동으로 글자의 수가 채워지는건가요? 어떻게 동작되는지 좀 설명해주시면 감사하겠습니다.

  • c++
grandstayner 댓글 1 좋아요 0 조회수 284

BFS 당근마킷 엔지니어 승원이 문제 제꺼 한번 봐주실 수 있나요?

해결됨

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

안녕하세요 큰돌님. 문제 해답 보기 전에 영상 멈추고 풀기 시작했다가 1시간이나 까먹었네요.... 이래도 성장 할 수 있을지 고민입니다. 개인적인 고민은 뒤로 두고 다음의 코드로 풀긴 했는데 이게 맞는 코드인지 봐주실수 있나요? 항상 질문 답변 해주셔서 감사합니다. #include <bits/stdc++.h> using namespace std; int N, M, startY, startX, destY, destX, adj[104][104]; int dy[] = {1, 0, -1, 0}; int dx[] = {0, 1, 0, -1}; map<pair<int, int>, int> visited; void bfs(int y, int x) { pair<int, int> pos = {y, x}; visited[pos] += 1; queue<pair<int, int>> q; q.push(pos); while (q.size()) { auto loc = q.front(); q.pop(); for (int i = 0; i < 4; ++i) { int ny = loc.first + dy[i]; int nx = loc.second + dx[i]; pair<int, int> prevOffset = {loc.first, loc.second}; pair<int, int> nextOffset = {ny, nx}; if (ny < 0 || nx < 0 || ny >= M || nx >= N) continue; if (visited[nextOffset]) continue; if (adj[ny][nx] == 0) continue; visited[nextOffset] = visited[prevOffset] + 1; q.push(nextOffset); if (ny == destY && nx == destX) q = queue<pair<int, int>>(); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N >> M; cin >> startY >> startX; cin >> destY >> destX; for (int i = 0; i < N; ++i) for (int j = 0; j < M; ++j) cin >> adj[i][j]; bfs(startY, startX); cout << visited[make_pair(destY, destX)] << "\n"; return 0; }

  • c++
  • 코딩-테스트
박희천 댓글 1 좋아요 0 조회수 188

sstream에 있는 split()을 써도 되나요?

미해결

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

#include <sstream> #include <vector> int main() { std::string str = "1, 2, 3, 4, 5"; // str을 ,로 분리합니다. std::vector<std::string> tokens = split(str, ","); // 분리된 토큰을 출력합니다. for (const auto& token : tokens) { std::cout << token << std::endl; } } bard에 물어보니 string을 vector로 바꿔주는 split 함수가 있다고 하는데, 코딩 테스트 환경에선 이런 라이브러리를 사용 할 수가 없어서 함수를 외워서 써야하는건가요?

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

교안 116페이지 Ralo구조체 출력 결과 질문입니다.

미해결

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

안녕하세요, 강의를 잘 듣고 실습 중 질문이 있습니다. 알고리즘 교안 116페이지 Ralo구조체 예제 코드 진행 시 출력물에 대한 질문입니다. #include <bits/stdc++.h> using namespace std; struct Ralo { int a, b; double c, d, e; }; void print(Ralo ralo) { cout << ralo.a << " " << ralo.b << " " << ralo.c << " " << ralo.d << " " << ralo.e << '\n'; } int main() { Ralo ralo = {1, 1, 1, 1, 1}; print(ralo); vector<Ralo> ret; ret.push_back({1, 2, 3, 4, 5}); ret.push_back({1, 2, 3, 4, 6}); ret.push_back({}); ret.push_back({1, 3}); for (Ralo ralo : ret) { print(ralo); } return 0; } 위 예시에서 a, b의 자료형은 int이고 c, d, e 의 타입은 double라고 먼저 선언을 하게 되는데, main함수에서 출력 시 왜 일관되게 정수형으로 출력되는지 이해가 안됩니다.(형변환이 일어나야하거나, 타입 불일치에 따른 에러가 떠야 하는게 맞는거 아닌가요 ?!) 제가 부족한 개념이 많이 있을 수도 있으니 너그럽게 읽어주시면 감사하겠습니다. ^^;;

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

5-K 문제 틀린 로직인가요?

미해결

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

안녕하세요 큰돌선생님 매번 좋은강의와 코드 감사합니다 강의와 수업을 복습하며 문제를 다시 풀어보았는데요, 제 처음 풀이는 플러드 필을 사용하면 깔끔하게 풀 수 있을것 같아서 적용하여 풀어보았는데, 문제의 예제조차 통과하지 못하여 그냥 새롭게 큐를 계속 새로 만들어서 하는 방식으로 수정하여 통과하였습니다. 근데 첫번째 접근방법의 로직에서 틀린부분이 없다고 생각하는데 혹시 어디가 틀린것인지 봐주실 수 있으신가요? 새롭게 미세먼지가 퍼지는 부분을 큐에 계속 담는 방식을 사용하였습니다. 첫번째 틀린 코드 http://boj.kr/cdaa0817a0054c8aaa05db4a94fd4cc1 수정후 정답 코드 http://boj.kr/48dc28720f1840d78af14656ac682d39

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

변수 선언에 대한 결과 차이

해결됨

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

#include <bits/stdc++.h> using namespace std; string s; int cnt[26]; int main(){ cin >> s; for(char a : s){ cnt[a-'a']++; } for(int i = 0; i <= 26; i++){ cout << cnt[i] << " "; } return 0; } 이렇게 실행할 경우 baekjoon을 복붙하면 정상적인 결과가 나옵니다. 나중에 복습할 때 안 보고 풀어봤습니다만... 변수 선언을 다음과 같이 하니까 결과 값이 달라집니다. int cnt[26]; string s; 사실상 순서만 바뀌었는데 왜 이렇게 결과가 바뀌는지 궁금합니다.

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

3-K 시간초과 질문드립니다.

해결됨

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

http://boj.kr/e1c3caaa80904ade933b274903722b31 시간초과 해결을 못하겠어서 어디 부분이 틀린건지 잘 모르겠습니다 ㅠㅠ

  • c++
  • 코딩-테스트
요가인 댓글 1 좋아요 1 조회수 196

섹션10 RawBuffer의 _result버퍼 생성시 질문

해결됨

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

안녕하세요. 섹션10 RawBuffer의 _result버퍼 생성시 BUFFER_DESC 설정 부분 질문 드립니다. "B-14)+Viewport" 샘플 코드를 참조하였습니다. RawBuffer.cpp (줄: 120) 을 보면 아래와 같이 작성해주셨는데요 void RawBuffer::CreateResult() { D3D11_BUFFER_DESC desc; _output->GetDesc(&desc); desc.Usage = D3D11_USAGE_STAGING; desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; desc.BindFlags = D3D11_USAGE_DEFAULT; // UAV가 연결되려면, USAGE는 DEFAULT여야 함. desc.MiscFlags = 0; CHECK(DEVICE->CreateBuffer(&desc, nullptr, _result.GetAddressOf())); } desc.Usage 에 USAGE_STAGING 을 주셨는데, 아래 BindFlags 옆 주석으로는 "Usage 는 DEFAULT 여야 한다"고 적어주셔서 혼란스럽습니다. 그리고 BindFlags 에 USAGE_DEFAULT 를 주셨는데, 의도 된 값인지, 의도한 값이 아니라면 어떤 Flags 를 주어야 하는지 궁금합니다. 감사합니다.

  • c++
  • directx
presswon 댓글 4 좋아요 0 조회수 479

6-L 질문합니다

미해결

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

안녕하세요, 선생님 강의 잘 듣고 있습니다! 6-L 을 풀던 도중, 제 풀이 방법이 틀렸다고 나와 반례가 궁금합니다. 시간 복잡도는 O(n* n/2) 이라 통과 한다고 생각합니다. A[i]에 10을 곱한것은 혹시 모를 부동 소수점 오류가 날지 몰라 처리 해두었습니다. https://www.acmicpc.net/source/70768639

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

온라인 환경에서 Arrow, 제거와 발사 시 동기화 문제

미해결

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

안녕하세요 Rookis님. 강의를 모두 완강하고 포트폴리오를 개선하고 있는 중입니다. 강의 중에 화살을 온라인에 추가할 것이라면 Creature와 GameObject 내용을 수정해야 한다고 하셔서 코드 이사는 완료한 상태입니다. 지금 Arrow는 MyPlayer에서 입력을 받고 State와 WeaponType을 체크하면 Player에서 Scene에 Arrow를 스폰해주는 방식으로 알고 있습니다. 이걸 서버에서는 몬스터나 플레이어를 만드는 GameObject::Create 함수를 파줘서 Arrow를 make_shared로 만들어서 발사 처리를 하게 만들었는데요 서버에서 몬스터가 제거되면 클라이언트에서도 정상적으로 몬스터가 제거되는걸 확인은 했습니다. 그러나 문제가 몇 가지 있습니다. Arrow 스마트 포인터가 해제되지 않는 현상 Arrow 동기화가 종종 씹히는 현상 입니다. 먼저 1번입니다. make_shared로 생성된 Arrow가 해제되지 않음 void Player::UpdateSkill() { if (room == nullptr) return; if (info.weapontype() == Protocol::WEAPON_TYPE_SWORD) { // 내 앞에 있는 좌표 CreatureRef creature = room->GetCreatureAt(GetFrontCellPos()); if (creature) { if (creature->GetType() == Protocol::OBJECT_TYPE_PLAYER) { SetState(IDLE); return; } // 몬스터가 플레이어에게 피격 creature->OnDamaged(shared_from_this()); } } else if (info.weapontype() == Protocol::WEAPON_TYPE_BOW) { ArrowRef arrow = CreateArrow(); arrow->SetDir(GetLookAtDir(GetFrontCellPos())); arrow->SetOwner(shared_from_this()); arrow->room = room; arrow->info.set_posx(info.posx()); arrow->info.set_posy(info.posy()); arrow->SetState(IDLE, true); room->AddObject(arrow); } SetState(IDLE); } 서버쪽의 UpdateSkill 함수인데 여기에서 arrow를 CreateArrow로 만들어서 room에 AddObject로 _arrows map을 만들어 관리를 하고 있습니다. (사실 룸에서 발사체를 관리하는 것이 옳은지도 의문이긴 합니다) void GameRoom::Update() { for (auto& item : _players) { item.second->Update(); } for (auto& item : _monsters) { item.second->Update(); } for (auto& item : _arrows) { item.second->Tick(); } } 그리고 Update 함수, AddObject, RemoveObject도 _arrows map을 처리하게 만들었습니다. 이렇게 처리하다 보니 화살을 제거할 때 몬스터가 피격받는 순간에 해당 화살을 RemoveObject를 실행하니 삭제 이후에 for문을 돌 때 오류가 발생하며 크래시가 발생했습니다. Arrow가 _arrows 맵에서 관리되어서 스마트 포인터가 해제가 안되는 것 같은데, 화살을 어떤 때에서 제거해야 될지 모르겠습니다. 지금은 임시적으로 vector에 참조로 받아와서 Update 하단에서 erase하는 방법을 사용하고 있습니다. 화살 동기화 문제 클라이언트에서는 Projectile 클래스에서 _owner에 대한 정보를 들고 있고 Arrow를 Scene에서 소환할 때 GetOwner 함수로 화살의 주인에 대한 포인터를 들고 있도록 했습니다. 기존에 발사할 때도 S_Move 패킷을 그대로 이용해서 Arrow의 _owner 포인터를 이용해서 위치를 초기화해주고 있습니다. 그런데 두 클라이언트를 접속시켜서 2를 눌러 WeaponType을 Bow로 바꿔서 공격 키로 테스트해보면 종종 반대쪽 플레이어의 화살이 안보이는 경우가 있습니다. 여기에 몇 개의 질문이 있는데요 1) 화살을 생성하고 클라이언트에서 패킷을 전송하는 것이 맞는지 2) 맞다면 어떤 정보를 패킷에 담아야 하는지 3) 서버에서는 어떤 처리를 해주어야 하는지 잘 모르겠습니다. 일단은 Make, Handle 함수를 파서 ObjectInfo를 넣어놓긴 했습니다. 하루 종일 코드를 조작해봐도 해결을 못하고 있습니다.. 도와주세요..

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

Graphics강의 생성자에서 멤버함수 호출

해결됨

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

Graphics 11:15 시간에 생성자함수에서 멤버함수를 호출하는데 큰 문제가 되지는 않나요? 검색했을 때 가상함수만 아니면 괜찮다는 글이 많긴 하던데 보통 멤버 함수를 호출해야 하는 경우에는 Init()함수를 따로 만들기만 했었습니다. 그리고 언리얼에서는 생성자 함수에서 멤버함수 포인터를 사용하는 경우에도 에러가 발생했었기 때문에 함수 포인터를 사용하는 경우에는 BeginPlay 함수에서 호출했었습니다.

  • c++
  • directx
강건희 댓글 2 좋아요 0 조회수 602

1620문제 번호가 바뀐 김에

해결됨

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

안녕하세요 큰돌님, 현 1620 단어퍼즐 https://www.acmicpc.net/problem/1165 위 문제를 연습 삼아서 그냥 풀어 보려하는데 혹시 실제 코테에 파일스트림 읽어서 문제 풀이를 진행해야 하는 케이스가 꽤 있는 편인가요?

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

MATCHES - 특정 패턴 포함

미해결

readable_code::CMake - Fancy하게 C++ Project 만들기

26분 45초에 다른 메시지를 보고 되었다고 오해하신거 같아요 ^[a-z]{3}.txt$ abc.txt도 되지 않고 a3.txt도 되지 않는데 어떨때 True인가요?

  • c++
  • cmake
  • 소프트웨어-설계
JWJ 댓글 2 좋아요 0 조회수 462

2-M 질문있어서 문의드렸습니다

해결됨

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

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님 강의 잘 보고있습니다! 2-M문제를 풀때 to_string의 시간복잡도가 O(log n) , find가 O(N)이라서 시간복잡도에 문제가 있을줄 알았는데 해결이 되었습니다. 혹시 이 문제의 시간복잡도는 어떻게 될까요??

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

문자 질문입니다.

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

혹시 char ch3 = 'a' + 1; 이 코드에서 1은 int형 정수로 출력이 되는데 char 타입이 자동으로 변환을 해서 2바이트로 할당하게 되는건가요? 그리고 1이라는 숫자에 마우스 커서를 놔두면 (int)1이라고 표현이 되는데 여기서 1은 데이터타입이 문자가 아닌 정수로 변환해야 해서 자동 변환 시켜주는건지 궁금합니다.

  • c++
layer08 댓글 2 좋아요 0 조회수 312

인기 태그

인프런 TOP Writers

주간 인기글