묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-F MAX 처리에 대한 질문
int go(int index, int k, int mask) { if (k < 0) return 0; if (index == 26) return count(mask); int ret = go(index+1, k-1, mask | (1 << index)); if (index != 'a'-'a' && index != 'n'-'a' && index != 't'-'a' && index != 'i'-'a' && index != 'c'-'a') { ret = max(ret, go(index+1, k, mask)); } return ret;}위 GO함수 내에서 마스킹할때는 ret에 max 처리를 하지 않았는데 마스킹하지 않을 경우에 ret에 max처리를 하신 이유가 궁금해서 질문드립니다! 어떠한 차이가 있는건지 잘 이해가 안가네요 ㅜㅜ
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
윈도우 API 프레임워크제작) LINK1168 오류 관련 문의 드립니다. (xxx.exe을(를) 쓰기용으로 열 수 없습니다.)
윈도우API 강의 따라해 보고 있는데 어느 순간부터 빌드할 때마다 LINK1168 오류가 납니다. 이에 여기 저기 찾아봤는데 VS에서 이전 실행 창을 제대로 종료하게 되지 않으면 exe 파일이 남아 있게 되어 다시 빌드 시 아래와 같은 오류가 나온다고 하더라구요. 그래서 cmd에서 taskkill 을 통해 남아 있던 exe 파일을 종료하고 다시 빌드 실행하면 잘 되는데, 이때 다시 주석만 달고 빌드를 하게 되면 다시 또 LINK1168 오류가 나네요.. 이거 왜 이런지 계속해서 찾아보고 강의 다시 보면서 코드 다시 쳐보면서 알게 되었는데 아래와 같이 while(true){pfPeakmessage~)이 부분이 기존에 있던 코드에서 수정 및 추가되면서부터 빌드 이후에 종료하여도 exe 파일이 잔재하여 위와 같은 오류가 발생하는 것으로 확인이 됩니다. 위 부분은 게임 관련 작업 시에 어떤 메시지 인풋이 없어도 계속해서 화면 렌더링 하는 부분이라 필수적인 것 같은데,, 위 부분을 냅두자니 계속해서 오류가 발생하고 어떻게 하면 좋을지 모르겠네요ㅠ관련하여 도움 주시면 감사 드리겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-E 뮤탈리스크 질문있습니다.
뮤탈리스크 문제를 아래의 논리로 해결하는 코드를 작성했습니다. 예제는 전부 통과했는데, 왜 제출하면 답이 틀리는 지 잘 모르겠습니다.논리scv 체력의 합이 1 이상이면 뮤탈은 공격해야 한다.scv 체력을 내림차순으로 정렬한다.체력이 높은 scv 순으로 9,3,1 데미지를 입힌다.데미지를 입어 체력이 0 미만이면, 0으로 체력을 재조정한다.scv의 체력을 합한다.위의 과정을 반복하면서 횟수를 센다.코드http://boj.kr/5dd90a26a8b24bb797b6bcffcde65bba
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
제 코드에서 어디가 잘못된 지 잘 모르겠습니다
안녕하세요 선생님, 강의 잘 듣고 있습니다.선생님 덕분에 코딩의 즐거움을 느끼고 있습니다. http://boj.kr/bbbe4b5ba1ae4d06a05d057e9dfbc3d0제가 작성한 코드인데, 테스트 케이스에 있는 입력값을 돌려보면 17, 63 이라는... 터무늬 없는 숫자가 나옵니다. 주석 처리된 부분을 통해 headgear, eyewear, face 의 갯수까지는 잘 들어온 것을 확인할 수 있었는데 그 이후, ans 에 map의 값을 순차적으로 곱해나가는 부분에서 문제가 있는 것 같습니다. 하지만 아직까지 어떤 부분에서 코딩을 잘못한건지 찾고있지 못하여 선생님께 질문을 드리게 되었습니다. 다시한번 좋은 강의 늘 감사드립니다.
-
미해결Do it! 알고리즘 코딩테스트 with C++
백주 1456번
for (int i = 2; i <= 10000000; i++) { if (num[i] != 0) { long long temp = num[i]; while ((double)num[i] <= (double)B/(double)temp && (double)num[i] >= (double)A / (double)temp) { count++; temp = temp * num[i]; } } }풀이와 다르게 while 문에서 min값까지 판단하게되면 왜 답이 달라지는건지 모르겠습니다.어떤 값을 count 못하게 되는건지 모르겠습니다
-
해결됨스스로 프로그래밍 하는 능력을 키우는 C++
숙제 답지
안녕하세요! 강의 열심히 잘 듣고 있습니다. 감사합니다. 그런데 혹시 숙제에 대한 답지는 제공되지 않는건가요??ㅜㅜ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
map을 2개 사용하는 방식이 좋은지 이 방식이 좋은지 궁금하여 질문드립니다!
소스 코드http://boj.kr/d754f100ea9f49e6b9f3bd0c8f1ec98a저는 map을 <int, pair<int, int>>의 형식으로 사용했는데요, first에는 key, second.first에는 빈도수, second.second에는 입력 순서가 저장됩니다. 강의를 보기 전 문제를 풀어 보았는데 이러한 방식으로 구현하는 것이 map을 2개 사용하는 것보다 효율적일까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R 질문합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 큰돌님.<1번 코드>#include <iostream> #include <vector> using namespace std; int n, root, del, visited[53], cnt; vector<int> v[53]; bool isLeaf; void dfs(int n){ visited[n]= 1; isLeaf=true; for(int i : v[n]){ if(!visited[i] && i != del){ //방문하지 않았고 현재 i가 del이랑 다르면 dfs를 계속 호출해서 탐색해야 함 isLeaf = false; dfs(i); } } if(isLeaf){ cnt++; } } int main(){ cin >> n; int num; for(int i=0; i<n; i++){ cin >> num; if(num == -1){ root = i; }else{ v[num].push_back(i); } } cin >> del; if(del == root){ cout << 0 << "\n"; }else{ dfs(root); cout << cnt << "\n"; } return 0; }#include <iostream> #include <vector> using namespace std; int n, root, del, visited[53], cnt; vector<int> v[53]; void dfs(int n){ visited[n]= 1; bool isLeaf = true; //가지마다 체크해야하니까 for(int i : v[n]){ if(!visited[i] && i != del){ //방문하지 않았고 현재 i가 del이랑 다르면 dfs를 계속 호출해서 탐색해야 함 isLeaf = false; dfs(i); } } if(isLeaf){ cnt++; } } int main(){ cin >> n; int num; for(int i=0; i<n; i++){ cin >> num; if(num == -1){ root = i; }else{ v[num].push_back(i); } } cin >> del; if(del == root){ cout << 0 << "\n"; }else{ dfs(root); cout << cnt << "\n"; } return 0; } 처음에 첫번째 코드로 작성하여 리프 노드의 갯수가 제대로 출력되지 않았습니다. isLeaf라는 변수의 선언 위치에 따라 값이 달라지는데 왜 두 코드가 값이 다르게 나오는지 모르겠습니다..
-
해결됨Do it! 알고리즘 코딩테스트 with C++
백준 1325, 교재 47번 문제 질문입니다.
교재에서는 bfs로 구현했는데 저는 dfs로 구현해봤습니다.그랬더니 시간초과가 발생했네요. 제가 작성한 코드가 올바른답이긴하지만 시간초과가 발생하는건지, 아니면 그냥 틀린건지 궁금합니다. 또한 올바른답 이맞다면 왜 시간초과가 발생하는지(시간복잡도 차이가 왜 크게 나는지)도 궁금합니다. #include <iostream>#include <vector>#include <queue>using namespace std;int maxdepth=-1;vector<vector<int>> a;vector<bool> visited;void dfs(int k, int depth);int main() {ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);int n,m;cin >> n >> m;a.resize(n + 1);visited = vector<bool>(n + 1, false);for (int i = 0; i < m; i++) {int s,e;cin >> s >> e;a[e].push_back(s);}vector<int> result(n + 1, 0);for (int i = 1; i <= n; i++) {dfs(i, 0);result[i] = maxdepth;maxdepth = -1;fill(visited.begin(), visited.end(), false);}int realmax = -1;for (int i = 1; i <= n; i++) {if (result[i] > realmax)realmax = result[i];}for (int i = 1; i <= n; i++) {if (realmax==result[i])cout<<i<<' ';}}void dfs(int k, int depth) {if (maxdepth < depth)maxdepth = depth;visited[k] = true;for (int i : a[k]) {if (!visited[i]) {dfs(i, depth + 1);}}visited[k] = false;}
-
해결됨홍정모의 따라하며 배우는 C++
함수 오버로딩 부분 (7.7강)
void print(char *value) {} void print(int value) {} int main() { print(0); print('a'); }이 부분에서 print('a')가 print(char *value) 쪽으로 인식되지 않는 이유가 궁금합니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
빌드 오류 질문
안녕하세요 루키스님 소켓프로그래밍 입분 20분 초반대에 빌드하셔서 실행하시면 서버와 클라이언트가 잘 실행되서 연결되지만 제 환경에서는 Debug\ServerCore.lib 파일을 열수 없다 오류가 나옵니다.ServerCore를 먼저 빌드 후 해봐도 그렇고 루키스님께서 올려주신 파일을 다운받아 순차적으로 빌드해도 동일한 증상이 나타나는데 무슨 문제인지 알 수 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
bfs 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌 선생님 이번 정답 코드를 보고 의문점이 생겨서 게시글을 남깁니다! 저번 G-12851 문제에서 trace만 추가된것이 이번 H-13913 문제인데 저번 G번 문제 같은 경우 bfs를 이용한 해설코드가 다음과 같았습니다.그런데 이번 H 문제에서는 이렇게 짜셨는데 G번 문제에서는 here==k 일 때 break를 걸지 않고 H문제에서는 걸어도 되는 이유는 정확히 모르겠습니다.. 혼동이 오네요 또한 G번 문제에서 H문제 처럼 here==k 라는 조건 즉, 동생을 찾았다는 조건이 없으면 동생의 위치를 찾아도 계속 bfs가 돌아서 시간적으로 더 소모가 되는게 아닌가요...?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
9996번 문제 질문입니다!
예제도 다 맞고 질문게시판에 반례들도 다 넣어서 옳게 출력된 거 같은데 런타임 에러가 납니다ㅠㅠ뭘 빼먹었을까요?http://boj.kr/e808a1c39cc74954a63f14721dc3dce3
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-a
// Online C++ compiler to run C++ program online #include <bits/stdc++.h> using namespace std; //// 다이어트 int N,mp,mf,ms,mv; int resultSet; vector<int> resultSetVector; typedef struct food{ int v[5]; }food; food* input(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>N>>mp>>mf>>ms>>mv; food* fList = (food*) malloc(sizeof(food) * N); for(int i=0; i<N; i++){ for(int j=0; j<5; j++){ cin >> fList[i].v[j]; } } return fList; } void printBitSet(int resultSet, int N){ for(int i=0;i<N; i++){ if( resultSet & (1<<i) ) { cout << i + 1 << " "; } } } //// logic // 1. 모든 조합을 구한다. // 2. 해당 조합 중에 최소 영양소 기준을 만족하는 조합을 찾는다. // 3. 해당 조합 중 최소 비용 조합을 찾는다. void solve(){ food* fList = input(); int result = INT_MAX; for(int i=0; i<(1<<N); i++){//O(N^2) //1. int sum[5] = {0}; for(int j=0;j<N;j++){ if(i&(1<<j)){ sum[0] += fList[j].v[0];//pi sum[1] += fList[j].v[1];//fi sum[2] += fList[j].v[2];//si sum[3] += fList[j].v[3];//vi sum[4] += fList[j].v[4];//ci } } //2.mp,mf,ms,mv if(sum[0] >= mp && sum[1] >= mf && sum[2] >= ms && sum[3] >= mv){ //3. if(result >= sum[4]){ result = sum[4]; resultSet = i;//최소 비용 조합 } } } if(result == INT_MAX) cout << -1 << '\n'; else{ cout << result << "\n"; printBitSet(resultSet, N); } } int main(){ solve(); } void printBitSet(int resultSet, int N){ for(int i=0;i<N; i++){ if( resultSet & (1<<i) ) { cout << i + 1 << " "; } } ////..... //2.mp,mf,ms,mv if(sum[0] >= mp && sum[1] >= mf && sum[2] >= ms && sum[3] >= mv){ //3. if(result >= sum[4]){ result = sum[4]; resultSet = i;//최소 비용 조합 } } ////..... if(result == INT_MAX) cout << -1 << '\n'; else{ cout << result << "\n"; printBitSet(resultSet, N);//최소 비용 조합 출력 }} 안녕하세요 큰돌 님. 비트마스킹 문제 질문이 있어 여쭤봅니다. 어떤 반례가 있을지 궁금합니다. vector에 넣어주는 방식이 아니라, i 비트값을 업데이트 해서 프린트 해주는 방식으로 구현 했습니다.위 방식만 다르기 때문에 여기서 문제가 있을 거라 추측됩니다.12퍼센트 쯤에서 테케통과를 못 하더라구요ㅠ 도와주시면 정말 감사드리겠습니다. 공유 소스 보기 (acmicpc.net)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-d 오답 질문드립니다.
// Online C++ compiler to run C++ program online #include <bits/stdc++.h> using namespace std; // 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. typedef pair<int,int> pp; int R,C; int visited[1004][1004]; char cmap[1004][1004]; int fmap[1004][1004]; int dx[4] = {0,0,1,-1}; int dy[4] = {-1,1,0,0}; //pp start; queue<pp> q; queue<pp> fq; bool outOfBound(int y, int x){ return (y < 0 || x < 0 || y >= R || x >= C ); } bool isExit(int y, int x){//탈출구 return (y == 0 || x == 0 || y == R - 1 || x == C -1); } bool isWall(int y, int x){ return cmap[y][x] == '#'; } void input(){ // 초기화 fill(&fmap[0][0],&fmap[0][0] + 1004 * 1004 , INT_MAX ); cin >>R>>C; for(int i=0;i<R;i++) for(int j=0;j<C;j++){ cin >> cmap[i][j]; if(cmap[i][j] == 'F'){//fire then fmap[i][j] = 1; fq.push({i,j}); } if(cmap[i][j] == 'J'){//출발 지점 q.push({i,j}); visited[i][j] = 1; } } } //bfs int solution(){ int y,x; int ny,nx; //bfs fire while(!fq.empty()){ tie(y,x) = fq.front(); fq.pop(); for(int i=0; i<4; i++){ ny = y + dy[i]; nx = x + dx[i]; if( fmap[ny][nx] != INT_MAX ) continue; //visited if(isWall(ny,nx) || outOfBound(ny,nx)) continue; fq.push({ny,nx}); fmap[ny][nx] = fmap[y][x] + 1; } } //bfs person while(!q.empty()){ tie(y,x) = q.front(); q.pop(); if(isExit(y,x)){ return visited[y][x]; } for(int i=0; i<4; i++){ ny = y + dy[i]; nx = x + dx[i]; if(visited[ny][nx] || isWall(ny,nx) || outOfBound(ny,nx)) continue; if(fmap[ny][nx] <= visited[x][y] + 1) continue; //이미 불이 있는 지역 q.push({ny,nx}); visited[ny][nx] = visited[y][x] + 1; } } return -1; } //solve void solve(){ input(); int result = solution(); if(result == -1) cout << "IMPOSSIBLE"; else cout << result; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); } bool outOfBound(int y, int x){ return (y < 0 || x < 0 || y >= R || x >= C ); } bool isExit(int y, int x){//탈출구 return (y == 0 || x == 0 || y == R - 1 || x == C -1); } bool isWall(int y, int x){ return cmap[y][x] == '#'; } 2% 오답 처리가 나는데 도저히 모르겠습니다. ㅠㅠ 위로 뺀 bool 컨디션 체크에서 문제가 생겼을 수도 있을 거 같은데.. 로직 구조가 해답과 거의 유사해서 어디서 문제가 생겼는지 디버깅 해도 안 보이네요 ㅠㅠ.. 그리고 ######J#F###..##...##...# 원본 반례 찾아보다가 시험 해본 케이슨데 해설지 답에서 걸러내지 못하는 것 같습니다. 코테 너무 어려워요 ㅠㅠㅠ 4179번: 불! (acmicpc.net)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
테스트케이스는 잘 되는데 제출하면 에러
#include <bits/stdc++.h> using namespace std; int N, M; // 세로 : N int arr[8][8]; int visited[8][8]; int dx[] = { 0, 1, 0, -1 }; int dy[] = { -1, 0, 1, 0 }; int t = 1; int curVirus = 2; int cnt = 0; int maxCnt = 0; void BFS(int _y, int _x) { queue<pair<int, int>> q; q.push({ _y, _x }); int firstX = _x; int firstY = _y; while (q.size()) { tie(_y, _x) = q.front(); visited[_y][_x] = t; arr[_y][_x] = curVirus; q.pop(); for (int i = 0; i < 4; ++i) { int nx = _x + dx[i]; int ny = _y + dy[i]; if (nx < 0 || ny < 0 || nx >= M || ny >= N) continue; if (arr[ny][nx] == 0 && visited[ny][nx] != t) q.push({ ny, nx }); } } arr[firstY][firstX] = curVirus + 1; } void ClearSpreadVirus() { for (int y = 0; y < N; ++y) { for (int x = 0; x < M; ++x) { if (arr[y][x] == curVirus) arr[y][x] = 0; } } } void SpreadVirus() { for (int y = 0; y < N; ++y) { for (int x = 0; x < M; ++x) { if (arr[y][x] != curVirus) continue; if (visited[y][x] == t) continue; BFS(y, x); } } } void CountZero() { for (int y = 0; y < N; ++y) { for (int x = 0; x < M; ++x) { if (arr[y][x] == 0) ++cnt; } } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> N >> M; for (int y = 0; y < N; ++y) { for (int x = 0; x < M; ++x) { cin >> arr[y][x]; } } // 1. 브루트포스로 벽을 세운다. for (int b1 = 0; b1 < N * M; ++b1) { if (arr[b1 / M][b1 % M] != 0) continue; arr[b1 / M][b1 % M] = 1; for (int b2 = b1 + 1; b2 < N * M - 1; ++b2) { if (arr[b2 / M][b2 % M] != 0) continue; arr[b2 / M][b2 % M] = 1; for (int b3 = b2 + 1; b3 < N * M - 2; ++b3) { if (arr[b3 / M][b3 % M] != 0) continue; arr[b3 / M][b3 % M] = 1; SpreadVirus(); CountZero(); ClearSpreadVirus(); ++curVirus; maxCnt = max(maxCnt, cnt); cnt = 0; ++t; arr[b3 / M][b3 % M] = 0; } arr[b2 / M][b2 % M] = 0; } arr[b1 / M][b1 % M] = 0; } cout << maxCnt; return 0; } 안녕하세요.예제케이스는 답이 잘 나오는데 제출하면 에러가 뜹니다.코드가 복잡해서 디버깅이 쉽지 않네요..어디가 문제일까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
구현 문제
안녕하세요! 현재 구현 문제 강의까지 들었는데 좀 더 많은 구현 문제를 풀어보고 싶어서 질문 드립니다.! 혹시 백준에서 더 풀어볼 만한 문제 추천해주실 수 있으실까요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-P 질문 있습니다!
안녕하세요, 큰돌님! 7-P 관련해서 질문드립니다. bfs + 맵 으로 완탐을 구현했습니다.하지만, 계속 71%에서 틀립니다.강의 로직과 비슷하다고 생각하는데, 왜 안되는지 궁금합니다! https://www.acmicpc.net/source/72316595
-
해결됨홍정모의 따라하며 배우는 C++
const member function에 관하여 궁금한 점이 있습니다.
강의 중 아래 코드를 작성하고 난 후, 코드를 변형해 보다가 의문의 생겨 질문드립니다. class Something { public: string m_value = "default"; const string& getValue() const { cout << "const version" << endl; return m_value; } string& getValue() { cout << "non-const version" << endl; return m_value; } };영상에서 const member function은 함수 내에서 멤버 변수를 수정하지 않겠다는 의미라고 나왔습니다.그런데 해당 함수의 반환 타입에 해당하는 const를 지우자 에러가 발생합니다. const member function이 아닌 getValue()와 하는 작업이 같은데도 불구하구요.(둘 다 함수 내부에서 값을 변경하지 않음)string& getValue() const { cout << "const version" << endl; return m_value; // 오류 발생 }오류문을 검색하여 유사한 질문을 찾을 수 있었습니다.https://stackoverflow.com/questions/30146562/error-qualifiers-dropped-in-binding-reference-of-type-x-to-initializer-of-type링크의 답변을 읽고 제가 이해한 바는 다음과 같습니다 : 함수의 반환형이 참조형이라면 잠재적으로 접근하여 값을 변경할 가능성이 있는데, 본 함수는 const member function라서 함수의 멤버 변수가 변하지 않아야 하기에 이를 보장하기 위하여 수정하도록 에러를 발생시킨다고 보면 될까요?오류가 발생하던 함수의 형태에서 &와 const 둘 중 하나를 지웠을 때 에러가 사라지는 것을 보면 맞는 것 같긴 한데, 정확한 설명을 듣고 싶습니다.
-
미해결C 와 C++ 을 동시에 배워보자 - 두들낙서의 C/C++
float 출력관련 질문
#define CRTSECURE_NO_WARNINGS#include <stdio.h>int main() { float a, b; scanf("%f%f", &a, &b); //&:포인터 float hap = a + b; float cha = a - b; float gop = a * b; float mok = a / b; printf("%f + %f = %f\n", a, b, hap); printf("%f - %f = %f\n", a, b, cha); printf("%f * %f = %f\n", a, b, gop); printf("%f / %f = %f\n", a, b, mok);} 코드는 대략 이러한데, 예시로 입력값을 555.3과 234를 넣으면 555.299988과 234를 기준으로 계산이 됩니다. 왜 그런지 아시는 분이 혹시 계시다면 답변해주시면 감사드리겠습니다.