묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
BFS 당근마킷 엔지니어 승원이 문제 제꺼 한번 봐주실 수 있나요?
안녕하세요 큰돌님.문제 해답 보기 전에 영상 멈추고 풀기 시작했다가 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; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
sstream에 있는 split()을 써도 되나요?
#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 함수가 있다고 하는데, 코딩 테스트 환경에선 이런 라이브러리를 사용 할 수가 없어서 함수를 외워서 써야하는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 116페이지 Ralo구조체 출력 결과 질문입니다.
안녕하세요, 강의를 잘 듣고 실습 중 질문이 있습니다. 알고리즘 교안 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함수에서 출력 시 왜 일관되게 정수형으로 출력되는지 이해가 안됩니다.(형변환이 일어나야하거나, 타입 불일치에 따른 에러가 떠야 하는게 맞는거 아닌가요 ?!) 제가 부족한 개념이 많이 있을 수도 있으니 너그럽게 읽어주시면 감사하겠습니다. ^^;;
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-K 문제 틀린 로직인가요?
안녕하세요 큰돌선생님 매번 좋은강의와 코드 감사합니다강의와 수업을 복습하며 문제를 다시 풀어보았는데요, 제 처음 풀이는 플러드 필을 사용하면 깔끔하게 풀 수 있을것 같아서 적용하여 풀어보았는데, 문제의 예제조차 통과하지 못하여 그냥 새롭게 큐를 계속 새로 만들어서 하는 방식으로 수정하여 통과하였습니다. 근데 첫번째 접근방법의 로직에서 틀린부분이 없다고 생각하는데 혹시 어디가 틀린것인지 봐주실 수 있으신가요? 새롭게 미세먼지가 퍼지는 부분을 큐에 계속 담는 방식을 사용하였습니다. 첫번째 틀린 코드http://boj.kr/cdaa0817a0054c8aaa05db4a94fd4cc1 수정후 정답 코드http://boj.kr/48dc28720f1840d78af14656ac682d39
-
해결됨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;사실상 순서만 바뀌었는데 왜 이렇게 결과가 바뀌는지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 시간초과 질문드립니다.
http://boj.kr/e1c3caaa80904ade933b274903722b31 시간초과 해결을 못하겠어서 어디 부분이 틀린건지 잘 모르겠습니다 ㅠㅠ
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
섹션10 RawBuffer의 _result버퍼 생성시 질문
안녕하세요.섹션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 를 주어야 하는지 궁금합니다.감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-L 질문합니다
안녕하세요, 선생님 강의 잘 듣고 있습니다!6-L 을 풀던 도중, 제 풀이 방법이 틀렸다고 나와 반례가 궁금합니다.시간 복잡도는 O(n* n/2) 이라 통과 한다고 생각합니다.A[i]에 10을 곱한것은 혹시 모를 부동 소수점 오류가 날지 몰라 처리 해두었습니다.https://www.acmicpc.net/source/70768639
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
온라인 환경에서 Arrow, 제거와 발사 시 동기화 문제
안녕하세요 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를 넣어놓긴 했습니다.하루 종일 코드를 조작해봐도 해결을 못하고 있습니다.. 도와주세요..
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
Graphics강의 생성자에서 멤버함수 호출
Graphics 11:15 시간에 생성자함수에서 멤버함수를 호출하는데 큰 문제가 되지는 않나요? 검색했을 때 가상함수만 아니면 괜찮다는 글이 많긴 하던데 보통 멤버 함수를 호출해야 하는 경우에는 Init()함수를 따로 만들기만 했었습니다.그리고 언리얼에서는 생성자 함수에서 멤버함수 포인터를 사용하는 경우에도 에러가 발생했었기 때문에 함수 포인터를 사용하는 경우에는 BeginPlay 함수에서 호출했었습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1620문제 번호가 바뀐 김에
안녕하세요 큰돌님, 현 1620 단어퍼즐https://www.acmicpc.net/problem/1165위 문제를 연습 삼아서 그냥 풀어 보려하는데혹시 실제 코테에 파일스트림 읽어서 문제 풀이를 진행해야 하는 케이스가 꽤 있는 편인가요?
-
미해결readable_code::CMake - Fancy하게 C++ Project 만들기
MATCHES - 특정 패턴 포함
26분 45초에 다른 메시지를 보고 되었다고 오해하신거 같아요^[a-z]{3}.txt$abc.txt도 되지 않고 a3.txt도 되지 않는데 어떨때 True인가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-M 질문있어서 문의드렸습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 큰돌님 강의 잘 보고있습니다!2-M문제를 풀때 to_string의 시간복잡도가 O(log n) , find가 O(N)이라서 시간복잡도에 문제가 있을줄 알았는데 해결이 되었습니다. 혹시 이 문제의 시간복잡도는 어떻게 될까요??
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
문자 질문입니다.
혹시char ch3 = 'a' + 1;이 코드에서 1은 int형 정수로 출력이 되는데 char 타입이 자동으로 변환을 해서 2바이트로 할당하게 되는건가요?그리고 1이라는 숫자에 마우스 커서를 놔두면 (int)1이라고 표현이 되는데 여기서 1은 데이터타입이 문자가 아닌 정수로 변환해야 해서 자동 변환 시켜주는건지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 처음 겪는 맞왜틀
안녕하세요 큰돌님.원래 각 영상별로 영상 시작시 영상 잠깐 멈추고스스로 문제를 풀어보고 도저히 안되면 영상 보는데요.영상 끝까지 보고 edge case가 뭔지 찾아서 풀었네요. 혹시 이런 코테 준비할때 edge case 대응 방법이 있을까요?단순히 경험치가 쌓이면 늘게 되는건가요?
-
미해결홍정모의 따라하며 배우는 C++
6.18 2분 47초
안녕하세요? 혹시 여기서 왜 C의 주소를 출력했는데 이상하게 나오고(한자 같은 게 나오고), 나머지 float는 문제없이 출력되는지 궁금합니다ㅠㅠ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
locale error 해결 방법
안녕하세요. 저는 VScode를 이용해서 해당 강의를 수강중인 학생입니다.VScode window 환경을 사용 중이고 아래와 같은 에러를 확인하게 되서 해결 방법이 궁금합니다. 구글링을 통해서 해결하려 했고 제어판에서 유니코드 제외 언어 설정이 한국어로 되어 있는 것도 확인하였습니다.#include <locale>도 해봤으나 에러는 여전했습니다.해결 할 수 있는 방법을 알고 싶습니다. 해당 에러는 wcout.imbue(locale("kor"));에서 발생하는 것으로 확인하였습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
복습에 대해 질문 있습니다.
안녕하세요. 강의 정말 재밌게 잘 듣고 있습니다.강의를 듣고 복습하려고 하는 중에 복습은 어떻게 해야 하는지 감이 안 와서 여쭤봅니다.
-
미해결홍정모의 따라하며 배우는 C++
<6.19 다중포인터와 동적 다차원 배열> 이중 포인터임에도 불구하고 포인터의 주소값을 보유하고 있지 않음
int** matrix = new int* [row] 은 결국에는 row개의 포인터변수를 저장할 수 있는 공간을 만들어주고, 그 중 첫번째 요소의 주소값을 matrix가 가지게 된다는 것으로 이해했습니다. 하지만 아직도 정확히 이해가 안가는 부분이 있어 어리석은 질문드립니다.가정 1:제가 이해하기로는 이중 포인터 역시 포인터이기 때문에 다른 포인터의 주소값 을 가지는 변수입니다. 그러면 int** matrix = new int* [row] 같은 경우에도 row개의 포인터변수의 주소값 을 담아야하지 않습니까?하지만 matrix[0] 을 출력하였을때 (*matrix) 저는 그 포인터 변수의 주소값이 아닌 그 포인터 변수가 담고 있는 주소값이 출력됨을 확인할 수 있었습니다. int** matrix = new int* [row] 이 경우의 이중포인터는 " 이중 포인터는 다른 포인터의 주소값을 가르킨다" 라는 어떻게 보면 정석적인 정의와 다르게 사용된다고 보는게 맞습니까? (포인터 변수들을 보유하는 배열) 이중 포인터가 사용됬음에도 불구하고 matrix가 가지고 있는 값이 첫번째 요소(포인터)의 주소값이 그 포인터 자체가 들어갔기 때문인가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-L 안녕 질문이 있습니다.
http://boj.kr/2451435928954fd4ade7f532de725ef2재귀를 돌면서 hp가 0이하가 되면 0을 반환하고 사람의 명수 만큼 재귀를 돌며 hp가 남아있으면 hppy(행복)을 반환해줘서 최대값을 반환하는 dp를 작성했는데 문제에 나와있는 테스트 케이스와 질문게시판에 있는 테케를 전부 돌려봤는데도 무엇이 잘못되었는지 모르겠습니다.