묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-O 질문있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님. 제 코드가 "틀렸습니다"로 뜨는 이유를 모르겠습니다..... http://boj.kr/d1dcc4d3cd2645619e493eab43591718 감사합니다:)
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
Strcat함수 질문입니다
제가 군대 사지방이라 강의가 잘 안나와서 그런데 일단 혼자 만들어보면서 출력물은 똑같이 만들어지긴 했습니다만이렇게 코드를 짜보았는데 혹시 결과만 똑같으면 어떤 코드든지딱히 상관은 없는건지 궁금합니다 ex)최적화나 가독성등등
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-E 기저조건 질문있습니다
안녕하세요 선생님 🙂함수에 있는 기저조건과 4가지 숫자가 같을 경우에 리턴 값으로 string(1, a[y][x])를 주셨는데요, 1 또는 0이라고 말씀해주셨지만 이해가 가지 않습니다. string 키워드로 교안과 구글을 찾아봤고, xstring으로 타고 들어가 분석해보려고도 했지만 마땅한 답을 찾지 못하였습니다.string함수 관한 설명이나 참고할 수 있는 교안의 목차를 알려주신다면 정말 감사하겠습니다 🙂 추가로, 함수 안에 있는 string ret = "";를 전역으로 빼면 값이 이상해지더라구요. 이유를 잘 모르겠어서 질문드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-P 연구소 solve()>fill() 함수에서 전역변수 vector<> v가 초기화 될 수 있나요?
제가 코드안되는 부분 찾다가 solve()>fill(visited) 함수에서 전역변수 vector<> v의 크기가 0으로 초기화 되는 문제를 겪었습니다https://www.acmicpc.net/source/78783272상세한 문제는 위 코드링크에 주석 달아놓았습니다무언가 잘못한 거같은데 모르겠네요// 개요 vector<pair<int, int>> v; int solve(){ // 여기서 visited 아니라 v가 초기화됨 fill(&visited,,) } int main(){ max(ret,solve()); }
-
미해결홍정모의 따라하며 배우는 C++
[10:25] AutoPtr 포인터의 메모리 위치 질문
AutoPtr을 사용 시, 함수?가 끝나게 되면 자동으로 delete를 해주는 것은 이해했습니다. 그렇다면 res1이라는 포인터는 스택 메모리에 저장이 되어 있다고 생각하면 될까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5 - B 질문입니다!
#include <bits/stdc++.h> using namespace std; string str, fire_str; string ret=""; int main() { cin >> str >> fire_str; for (char i:str){ ret+=i; if (i==fire_str[fire_str.size()-1]){ if (ret.size()-fire_str.size()<0) continue; else if (ret.substr(ret.size()-fire_str.size(),fire_str.size())==fire_str){ ret.erase(ret.size()-fire_str.size(),fire_str.size()); } } } if (ret=="") cout << "FRULA"; else cout << ret; }out of range 제출하게 되면 out of range 에러가 뜨는데 이유를 모르겠습니다. 어디서 나는 건가요??
-
해결됨홍정모의 따라하며 배우는 C++
캐스팅에 대해 질문이 있습니다.
18:30 즈음부터 명시적 형변환에 대한 설명이 나옵니다. 내용은 아래와 같습니다.// C 스타일 캐스팅 (int)4.0; // CPP 스타일 캐스팅 int(4.0);그런데 따로 알아보니 강의 내용과 좀 맞지 않는 부분이 있는 것 같았습니다. 아래 링크를 간략하게 설명하면,https://en.cppreference.com/w/cpp/language/explicit_cast(int)4.0 과 같은 C-style cast를 컴파일러가 만나게 되면 아래 순서에서 맨 처음으로 해당 캐스팅의 조건을 만족하는 것이 선택되어 수행된다고 합니다. (컴파일 될 수 없더라도!)const_caststatic_caststatic_cast 다음 const_castreinterpret_castreinterpret_cast 다음 const_cast즉, C-style cast를 사용하면 위 캐스팅 종류 중 어떤 것이 사용되었는지 명확히 알 수 없다는 것을 의미합니다.여기에 추가적으로, 클래스 간 상속관계에서 private와 protected가 public으로 간주될 수도 있는 등의 예외도 존재하기 때문에 최근에는 C-style cast가 권장되지 않는 것으로 보입니다. 19:10에는 C-style cast와 나머지 캐스팅 방식 간에 기능성 차이가 없다고 나오는데, 차이가 충분히 있는 것 같습니다. 아래 Stackoverflow 글에도 관련 내용이 있습니다.https://stackoverflow.com/questions/27359961/c-difference-between-reinterpret-cast-and-c-style-cast 그리고 위에 있던 cppreference 링크의 functional-style cast 부분을 살펴보면, CPP 스타일 캐스팅이라고 소개된 int(4.0)는 사실상 C-style인 것을 알 수 있습니다.If there is exactly one expression in parentheses, this cast expression is exactly equivalent to the corresponding C-style cast expression.그래서 const_cast, static_cast, reinterpret_cast가 CPP 스타일 캐스팅이라고 소개되는 것이 옳지 않나 생각합니다.
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
BFS 코드 중에 이해가 안되는 부분이 있습니다.
import java.io.*; import java.util.*; class Solution { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws IOException { n = Integer.parseInt(br.readLine()); arr = new int[n][n]; check = new int[n][n]; check2 = new int[n][n]; Queue<Point> q = new LinkedList<>(); for(int i=0; i<n; i++){ String[] input = br.readLine().split(" "); for(int j=0; j<n; j++){ arr[i][j] = Integer.parseInt(input[j]); if(arr[i][j]==2) { q.add(new Point(i, j, 0)); check2[i][j] = 1; } } } /** * 3번 5번 케이스에서 하나씩 크게 결과가 나온다 * * while (!q.isEmpty()){ * Point poll = q.poll(); * * if(check[poll.x][poll.y] == 0){ * check[poll.x][poll.y] = 1; * for(int j=0; j<4; j++){ * int nx = dx[j] + poll.x; * int ny = dy[j] + poll.y; * if(nx>=0 && ny>=0 && nx<n && ny<n && check[nx][ny] == 0 && arr[nx][ny] == 0){ * q.add(new Point(nx,ny, poll.cnt+1)); * res = Math.max(res, poll.cnt+1); * } * } * } * } */ while (!q.isEmpty()){ Point poll = q.poll(); for(int j=0; j<4; j++){ int nx = dx[j] + poll.x; int ny = dy[j] + poll.y; if(nx>=0 && ny>=0 && nx<n && ny<n && check2[nx][ny] == 0 && arr[nx][ny] == 0){ check2[nx][ny] = 1; q.add(new Point(nx,ny, poll.cnt+1)); res = Math.max(res, poll.cnt+1); } } } System.out.println(res); } static int dx[]= {-1,1,0,0}, dy[]= {0,0,-1,1}; static int res = 0, n; static int arr[][], check[][], check2[][]; static class Point{ int x, y, cnt; Point(int a, int b, int c){ x=a; y=b; cnt=c; } } } 주석 코드로 BFS를 돌리면 3번과 5번 케이스에서 실패합니다. 선생님의 코드를 참고해서 check 배열을 이용하는 검증부분만 순서를 바꿔서 해결했는데요. 결국 이해는 못해서 두가지 코드 모두 동일한 알고리즘으로 보입니다 ㅠㅠ 명쾌한 답변 가능할까요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-J 주난의 난 이 코드는 어떤가요??
안녕하세요 ㅎㅎ 처음으로 3주차 문제를 혼자 힘으로 풀 수 있어서 너무 기뻤는데, 선생님과 다르게 풀어서 혹시 비효율적인 코드는 아닐까하고 여쭤보러 왔습니다! 얼마 전까지 실버도 못 풀던 제가 골드를 혼자 힘으로 맞출 수 있게 해주셔서 너무 감사합니다 ㅠㅠㅠ http://boj.kr/106cce4c523c4f4c8e18e73d413433e4
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
플로이드 워셜 관련 질문
플로이드 문제에서 가령 입력값이 아래와 같다고 할 때, 541 3 103 2 11 5 15 3 1 d[1][2] 의 값은 K = 3 일 때 d[1][2] = d[1][3] + d[3][2] = 11 그런데 d[1][3]은 이후에 K가 5일 때 연산을 통해d[1][3] = d[1][5] + d[5][3] = 2 근데 작아진 d[1][3]의 값이 반영되려면 K가 5일 때, d[1][5] + d[5][3] 연산을 한 '이후에' K가 3일 때d[1][2] =d[1][3] + d[3][2] 연산을 통해 d[1][2] 의 값이 바뀌어야 한다고 생각이 드는데 점점 증가해야 하는 K값이 값자기 작아질수는 없으니 그건 불가능합니다. d[1][2]의 값이 3이 되는데 필요한 어떤 연산을 제가 놓친건지 모르겠습니다...
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
단일쓰레드로 어디까지 커버가 될까요?
루키스님 강의 잘 듣고 여러가지 연동을 시도해서 컨텐츠를 만드는 중인데요 지금은 데이터나 오브젝트들이 많지 않아서 별 문제가 없는데 나중에 3d 포폴도 이걸 기반으로 만들고 싶어서 멀티쓰레드를 사용해야할 정도는 어느정도 되야하는지가 궁긍합니다. 그리고 마지막에 aws 에 서버 올리시는 부분을 잠깐 언급해주셨는데 c++서버강의엔 그런부분이 없는것 같아 그부분 강의 예정이 있는지도, 아니면 관련 자료나 공부를 어떻게 해야하는지도 궁급합니다
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
Static UserManager um을 포인터로 만들어서 리턴 하면 안되는 이유가 궁금합니다.
아래의 코드와 같이 포인터로 변수를 만들어줘서 넘겨주면 AddUser() 함수를 부를때 '_userCount' 올려주는 변수에서 '액세스 위반 this가 nullptr 입니다.' 라고 뜹니다.그 이유가 객체를 생성해 주지 않았기 때문에 'nullptr'이 생성 되는 건가요? 이해가 잘 되지 않는 부분이 static 함수를 부를 때 변수를 초기화 되어 전역 변수로 사용되는데, 포인터는 객체가 생성되지 않는 것 같더라구요.그래서 new UserManager( ) 를 통해 동적 할당을 하니 객체가 하나씩 생기는 문제가 발생하고, static 메모리와 동적 할당 되는 메모리 위치(?), 특성(?)이 달라서 생기는 문제인가 싶습니다.public: UserManager() :_userCount(0) {} static UserManager* GetInstance() { static UserManager* um = new UserManager(); um->_userCount = 0; return um; } 주저리 주저리 궁금한 내용을 적다보니 제대로 설명했는지 모르겠네요... ㅡㅜ 답변해 주신다면 감사하겠습니다. 혹시 몰라 _userCount를 생성자로 초기화 시켜줬습니다.class UserManager { public: UserManager() :_userCount(0) {} static UserManager* GetInstance() { static UserManager* um = nullptr; return um; } public: void AddUser() { _userCount++; } int GetUserCount() { return _userCount; } private: int _userCount = 0; };
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
dp를 이차원 배열로 만들어서 풀어봤는데, 틀립니다.
http://boj.kr/7c9fc1fdb4894c518c897537de03f02b선생님, 안녕하세요~dp를 이차원 배열로 만들어서 n번째 인덱스까지 돈m을 썼을때의 최대 칼로리 양을 저장하게 했습니다. int dp[5004][10004]; // n번째 인덱스까지 돈m을 썼을때 최대 칼로리양그 후 나머지 부분은, 동전문제에서 했던 것과 비슷하게, 단지 이차원 배열이니깐 dp[i][j]를 비교할 때, 가격이 이전 인덱스가 더 큰지, 아니면 이번 인덱스에서 가격만큼을 빼고 칼로리만큼을 더한게 더 큰지 비교해주도록 했는데요.for (int i = 1; i <= n; i++) { for (int j = 1 * 100; j <= m * 100; j++) { if (price[i] > j) { dp[i][j] = dp[i - 1][j]; } else { dp[i][j] = max(dp[i - 1][j], dp[i][j - price[i]] + cal[i]); } mx = max(mx, dp[i][j]); } }지금 제가 생각하기에, 코드를 이렇게 짰을때, 일차원배열과 이차원배열이 큰 차이가 있나 싶기도하고, 다른 냅색문제에서 이렇게해서 통과하는 경우가 있었기에, 어떤 차이가 있을까, 반례가 뭐가있을까 질문드리고 싶습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
함수 기초 질문입니다!
반환타입은 무조건 있어야 하고 매개변수는 사용해도, 안해도 상관이 없다고 하셨는데, 혹시 그 이유에 대해서 여쭤볼 수 있을까요? (반환타입을 무조건 사용해야하는 이유와 매개변수를 사용해도 안해도 상관없는 이유)반환타입이 void 일 경우, return은 사용해도 안해도 된다고 하셨습니다. 만약, 반환타입이 int, float, char 등일 경우에는 무조건 return을 사용해야 할까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-J ret-1 관련 질문 드립니다.
큰돌님 안녕하세요? http://boj.kr/bf56f9dfa3334722b3c4d22ac01f67da저는6-J 해당 문제에서ret=60000000004로 설정하고이분탐색에서ret = min(ret, mid);으로 최적의 ret을 찾는 방법을 사용하고 싶은데요,강의의 ret-1이 저는 아직 이해가 안가서 질문 드립니다. Q1. 해설에서는 ret=0;으로 설정하고 이분탐색에서ret=mid;로 min()함수 없이 사용하셨는데 상관 없는건가요? Q2.강의 8:16초 28명과 35명 중에서 35명를 찾는 과정을 먼저 한다고 하셨는데최적의 ret(mid)인 35 찾는건 이해했는데ret-1코드로 인해 (해설 코드 26 line, 또는 강의 7분 54초 부분)28부터 시작하는게 아니라 34(35-1은 34이므로)부터 하는것 아닌가요?이부분 궁금해서 질문 드립니다. 답변 미리 감사합니다.수강자 올림.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
리소스 파일 경로
강사님 혹시 제 코드와 강사님 코드를 비교하려고 파일을 다운받았는데요 리소스파일 이미지 경로가 틀려서 확인을 못하는데 혹시 어디서 변경할 수 있는지 알 수 있을까요? 오류는 계속 이렇게 뜹니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-Y 원판 돌리기
http://boj.kr/f8db50bd4ee848db99f4e157879c03d1테스트 케이스는 맞고 출력해봤을 때 해당 예제처럼 인접 값 삭제되는게 확인되는데 왜 틀렸는지 모르겠습니다.. 저는 vector<int> vec[54]로 1번부터 n까지 값을 저장한 후, 벡터를 rotate했습니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
(공부 방법 관련) 모르겠으면 답을 보고 풀어도 되는걸까요ㅠㅠ
안녕하세요! 선생님 강의 잘 듣고있습니다 ㅎㅎ다름이 아니라,, 공부 방법에 대해 궁금한 점이 있어서요. 2주차까지는 제시해주신 문제 문제 대부분이 실버라서 답을 안 보고 풀고, 선생님 강의 보면서 더 나은 답을 배워가는 식으로 공부해왔는데,, 3주차 브루트포스부터는 골드가 대부분이라 자꾸 답에 도달하지 못하고 결국 강의 코드를 참고하게 됩니다ㅠㅠ (제가 아직 골드를 안 보고 풀 수 있는 실력이 아닌 것 같아요..)당연히 몇 시간 동안 저 스스로 풀려고 노력하는데, 늘 테케는 맞추더라도 히든테케를 틀리고ㅠㅠ 테케가 맞았으니까 어느정도 답에 근접하긴 했다고 생각했는데 막상 큰돌쌤 답을 보면 저랑 다르게 짧고 깔끔하게 구조화하셨더라구요. ㅠㅠ 예를 들면, 인구이동(boj 16234) 문제에서 인접 컴포넌트니까 dfs써야지! 하고 와다다닥 dfs를 써서 코드를 짜긴 짜는데 주어진 조건이 많아지니까 혼란스러워하면서 배열도 많이 만들고 flag도 많이 만들어서 덕지덕지 코드를 짜다가 포기하고 답을 보는.. 이런식이 반복됩니다.. 다음날 다시 풀어봐도 전날 푼걸 외워서 푸는 것 같고 제가 다른 문제가 나왔을 때 풀 수 있을거라는 자신이 안 들어요 이렇게 스스로 풀지 못 하는 문제가 거의 대부분이라도 이런식으로 계속 답을 보면서 공부하는게 맞는걸까요? 쌤 답을 보면서 공부를 해도 제 스스로 문제푸는 힘이 길러질까요?ㅠ.ㅠ 한탄 읽어주셔서 감사합니다..
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
CreateMonster함수 질문
1.void CreatMonsters(Statinfo* monsters, int count)로 선언을 했는데 제가 여기서 monsters부분을 monsters[]로하니 오류가 나더군요 오류가 나는이유가 궁금합니다 Statinfo타입의 배열로 만들었는데 그러면 배열로 선언해줘야 하는거 아닌지 궁금합니다2. 1번과 연관된 질문입니다 void CreatMonsters(Statinfo* monsters, int count) 내부에서 랜덤밸류를 설정해서 몬스터의 i번쨰의 데이터를 집어넣는데 함수형식을 보면 Statinfo*라고해서 포인터로 선언했는데 내부 코드를보면 monster[i].hp를 사용하는데 배열관련된 부분은 .으로 접근해서 사용하는건 알겠는데 처음 함수를 선언할때 Statinfo*형식인데 ->로 접근해서 데이터를 변경하는게 맞는거아닌가요? 너무 헷갈립니다 3.EnterBattle(playerinfo,&monsters[index])을 실행할때 이런 모습인데 여기서 EnterBattle은 bool EnterBattle(Statinfo* playerinfo, Statinfo* monsterinfo);이런 모습인데 실행시킬때 &playerinfo가 아닌 그냥 playerinfo인 이유가 Entergame함수에서 인자로 받은 playerinfo가 애초에 주소값이기때문에 그냥 playerinfo로 넣는건가요? 그리고 또 monsters배열에는 &가 붙은이유는 &가없으면 주소값이아닌 그냥 값의 형태기때문에 &를 붙여 주소로 변경해주는건가요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
배열을 이용한 구현 풀이 질문드립니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 큰돌님! 항상 좋은 강의 감사합니다! 다름이 아니라 제가 이 문제를 풀 당시, 입력의 범위도 작고 풀이가 딱히 생각이 나지 않아 배열을 이용해 쌩구현을 했습니다. 하지만 N과 J의 범위가 커지면 제가 풀이한 방법으로는 시간복잡도가 커져서 틀리게 되겠죠?만약, M이 1이고, N, J가 1000만일 때 최악의 경우 사과가 양 끝 인덱스(1번과 1000만번)에만 떨어진다면 시간복잡도는 1000만 * 1000만이 될까요? 코드: http://boj.kr/047fdd5efd2c4f37968a1764f52f9a40