묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C++
14.3 / 3:50 질문있습니다
throw Exception(); 위에서 익명객체를 throw했습니다.제가 알기로는 익명객체는 rvalue로,주소값이 없는걸로 알고 있는데,이를 참조로 받을 수 있는 이유가 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-B 문제 메모리 초과 문의
안녕하세요 선생님,4-B 문제를 선생님 풀이를 보고 다시 풀어봤습니다.입력배열 A의 크기를 문제에서 주어진 최댓값인 20으로 설정할 때는 메모리초과로 오류가 나는 데, 혹시나 해서 21로 늘려보니 통과했습니다. http://boj.kr/985212f27de447b19f0c9794794c53e6http://boj.kr/915ba15212a94c9782d0a40dc8e1ce0c 어디서 문제가 생기는 지 알 수 있을까요?강의 항상 잘 보고 있습니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-M 시간초과 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/ef8ad015457e4bbba05ac351eb5ae0d8안녕하세요 강사님 7-M 문제에서 살아있는 나무는 정렬을 위해 deque를 사용했고죽은 나무는 queue를 사용해서 양분으로 바꿔줬는데 계속 시간초과에서 막혀 질문글 남깁니다...이 문제는 deque로 풀면 안되는 문제일까요? 아니면 제 코드에서 시간을 단축 시킬만한 곳이 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-C 입력 질문 있습니다.
for(int i = 1; i <= n; i++){ cin >> m; for(int j = 0; j < m; j++){ cin >> temp; adj[i].push_back(temp); adj[temp].push_back(i); } }입력을 받아서 인접 노드들을 벡터에 삽입해주셨는데, adj[temp].push_back(i); 이 부분이 들어가게 되면 같은 노드가 2번씩 벡터에 삽입되지 않나요? 예를 들어, 예제 입력 1에서 보면 1~6번 구역마다 인접 구역을 입력으로 받으니까 adj[i].push_back(temp); 이코드만 있어도 양방향 간선이 표시된다고 생각합니다. a[1] => {2, 4}a[2] => {1,3,6,5}a[3] => {4, 2}a[4] => {1, 3}a[5] => {2}a[6] => {2}이렇게요
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
최대 선호 음식 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 제출하니까 시간초과가 뜹니다. 어디가 잘 못 된건가요??import java.io.*; import java.util.*; public class Main { public static int[] pow, st; public static int n,d,k,answer=Integer.MIN_VALUE; public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); n=sc.nextInt(); d=sc.nextInt(); k=sc.nextInt(); pow = new int[d+1]; st = new int[n+1]; pow[1]=1; for(int i=2; i<=d; i++) pow[i] = pow[i-1]*2; for(int i=1; i<=n; i++) { int num, m; m=sc.nextInt(); for(int j=0; j<m; j++) { num=sc.nextInt(); st[i] += pow[num]; } } dfs(0,0,0); System.out.print(answer); } public static void dfs(int L, int s, int bit) { if(L==k) { int cnt=0; for(int i=1; i<=n; i++) if((bit&st[i])==st[i])cnt++; //st[i]가 bit의 부분집합이라면 cnt증가 answer = Math.max(answer, cnt); //최대값 갱신 } else { for(int i=s; i<d; i++) { //조합으로 탐색 dfs(L+1, i+1, bit+pow[i]); } } } }
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
숨겨진 합 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 답이 틀렸다고 나오는데, 어디가 잘 못 된건지 궁금합니다.import java.io.*; import java.util.*; public class Main { public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); String s=sc.next(); int res=0; int sum=0; for(char x : s.toCharArray()) { if(Character.isDigit(x)) { res = res*10 + (x-48); } else { sum+=res; res=0; } } System.out.print(sum); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
어떤 부분이 문제일까요?
http://boj.kr/f9e04dedecf9402eb6e1bcb1042dcfa6선생님 안녕하세요.선생님이 작성해주신 답이랑 비교해봤을 때, 차이가 나는 부분은 if문을 통해 idx가 a[i].first보다 큰지 작은지를 가른뒤, 계산해주는 부분밖에 없는 것 같습니다. 선생님께서는 a[i].second - a[i].first 또는 idx 이런식으로 직접 해주셨고, 저는 s라는 변수에 a[i].first 또는 idx 를 담아줘서 계산해준 것 밖에 차이가 없다고 생각하는데요.어떤부분이 달라서 정답이 아니라고 나오는 걸까요?? (if(a[i].second <= idx) continue; 이부분은 문제에 웅덩이는 겹치지 않는다는 조건이 있어서 넣지않았습니다.)
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
포인터 관련
인터넷을 찾았을 때 굉장히 헷갈리는 부분이 있는데예시로 int* a = &b;에서포인터 a는 b의 주소를 가리킨다라는 설명도 있고포인터 a는 b를 가리킨다라는 설명도 있는데둘 중에 어떤 것이 맞는 설명인가요?
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 채점결과
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.#include<stdio.h> #include<algorithm> using namespace std; int a[1001], n; int Count(int s){ int i, cnt=1, sum=0; for(i=1; i<=n; i++){ if(sum+a[i]>s){ cnt++; sum=a[i]; } else sum=sum+a[i]; } return cnt; } int main(){ //freopen("input.txt", "rt", stdin); int m, i, lt=1, rt=0, mid, res, maxx=-2147000000; scanf("%d %d", &n, &m); for(i=1; i<=n; i++){ scanf("%d", &a[i]); rt=rt+a[i]; if(a[i]>maxx) maxx=a[i]; } while(lt<=rt){ mid=(lt+rt)/2; if(mid>=maxx && Count(mid)<=m){ res=mid; rt=mid-1; } else lt=mid+1; } printf("%d\n", res); return 0; } 강사님께서 직접 올려주신 코드 복사해서 돌려봐도 채점 결과가 아래 사진과 같이 뜹니다 그동안 다른 문제들 채점 프로그램은 이상이 없었는데 43번만 채점결과가 이상해서 질문 드립니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
21번 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 21번 문제 질문드립니다.문제에서 두 사람 모두 0-9까지 카드를 중복없이 각 한 장씩 갖고 있다고 하였는데, 코드 상에서 이에 대한 예외처리가 없어 scanf로 데이터 넣어주는 부분에서 이중 for문을 돌리면 될까요?다른 좋은 방법이 있을지 문의드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2776 암기왕 문제 시간복잡도에 관해 질문이 있습니다
안녕하세요 큰돌님암기왕 문제를 map을 사용한 경우 탐색에 log(n)의 시간복잡도를 갖는데, 이분탐색을 사용한 방법과 시간차이가 커서 질문드립니다. sort를 사용하는 경우에 정렬에 nlog(n), 값을 찾는데 log(n)이 걸리며,map을 사용하면 삽입에 n * log(n), 값을 찾는데 log(n)이 걸리니 결국 비슷할거라 생각했는데 시간차이가 2배나 나는 이유를 모르겠습니다 ㅜ#include<bits/stdc++.h> using namespace std; int t, n, m, temp; int main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); cin >> t; for(int i = 0; i < t; i++){ map<int, int> mp; cin >> n; for(int j = 0; j < n; j++){ cin >> temp; mp.insert({temp, 0}); } cin >> m; for(int j = 0; j < m; j++){ cin >> temp; if(mp.find(temp) == mp.end()) cout << 0 << '\n'; else cout << 1 << '\n'; } } return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-J 풀이가 가지 않아서 질문드립니다
안녕하세요 큰돌님.풀이를 몇번을 봤는데도 이해가 가지 않아서 질문드립니다. 이분탐색으로 찾으려는 것- 실제 필요한 시간보다 조금 더 큰 시간- 즉, ret이 놀이기구를 타는데 걸린 총 시간이 됨ret - 1 / a[i] - ex) 문제 예시 들어주신 것처럼 4분이 딱 되었을 때 새롭게 타는 사람 수를 빼주기 위해 하는 로직전체 묶음을 다 처리하고 놀이기구에 아무도 안 탄 상태로 가정하고 그 부분부터 한명씩 태우는 로직 이렇게 파악하긴 했는데, 아무리 봐도 2번, 3번이 전혀 이해가 가지 않습니다... 놀이기구 수만큼을 바로 태울 필요가 있나요? 처음 시작을 temp = m으로 시작하지 않고 temp = 0을로 시작하면 4분일 때 딱 7명 태운걸로 나와서 ret - 1 / a[i] 로직을 안해도 되지 않나요? 그리고 마지막에 총 걸린시간(ret) % a[i] 로직이 어떤 의미인건지 이해가 안 됩니다 ㅠㅠ 아래는 제가 선생님 코드를 이해하려고 주석을 달아본 코드입니다.#include<bits/stdc++.h> using namespace std; #define max_n 60000000004 #define MAX_M 10004 typedef long long ll; // ret : 총시간, temp가 m : 여기서 부터 시작 ll n, m, a[MAX_M], lo, hi = max_n, ret, mid, temp; bool check(ll mid) { temp = m; // 놀이기구 수만큼은 바로 태울 수 있으므로 m명은 태우고 시작 for (int i = 0; i < m; i++) temp += mid / a[i]; return temp >= n; // 총 걸리는 시간이 mid일 때 n명이상 태울 수 있는지 } int main() { cin >> n >> m; for (int i = 0; i < m; i++) cin >> a[i]; if (n <= m) { cout << n; return 0; } while (lo <= hi) { mid = (lo + hi) / 2; if (check(mid)) { ret = mid; // 총 걸린 시간 hi = mid - 1; } else lo = mid + 1; } // temp : 4분까지 태운 학생 수 -> 4분이 딱 됐을 때 바로 추가로 태울 수 있는데 그걸 뺀 순수하게 4분까지 태운 학생 수 temp = m; for (int i = 0; i < m; i++) temp += ((ret - 1) / a[i]); // 4분부터 시작해서 다시 순차적으로 놀이기구 태움 -> 즉, 여기서는 놀이기구에 아무도 타있지 않은 초기 상태임 for (int i = 0; i < m; i++) { if (ret % a[i] == 0) temp++; // % 연산의 결과가 0이 아날 경우 == 놀이기구에 이미 학생이 탑승되어 있음 if (temp == n) { cout << i + 1 << "\n"; return 0; } } return 0; }
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
코드 관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 보다보면 미로맵 제작 같이 다운로드가 안되는 코드를 올려주신 다는 말씀을 하시는데 혹시 코드는 어디서 다운 받을 수 있을까요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
포인터가 깊은복사 얕은복사와 같나요?
포인터 수업을 들으면서 C#의 깊은복사와 유사한거같은데 같은의미인가요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
LoadFromWICFile() 함수를 쓰는데 LNK2038에러가 뜨는데 이유를 모르겠습니다
인터넷에 찾아보니 구성 속성" > "C/C++" > "코드 생성" > "런타임 라이브러리 를 /MT 나 /MD 로 맞춰주라고 해서 맞추기도 해봤는데 계속심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태 세부 정보 오류 LNK2038 '_ITERATOR_DEBUG_LEVEL'에 대해 불일치가 검색되었습니다. '0' 값이 '2'(Game.obj에 위치) 값과 일치하지 않습니다. 가메코딩 C:\Users\shhmu\Desktop\GameCoding_tmp\가메코딩\DirectXTex.lib(DirectXTexImage.obj) 1 심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태 세부 정보 오류 LNK2038 'RuntimeLibrary'에 대해 불일치가 검색되었습니다. 'MD_DynamicRelease' 값이 'MTd_StaticDebug'(Game.obj에 위치) 값과 일치하지 않습니다. 가메코딩 C:\Users\shhmu\Desktop\GameCoding_tmp\가메코딩\DirectXTex.lib(DirectXTexImage.obj) 1 이런 에러가 나타나는데 어떻게 해야 할까요??
-
미해결스스로 프로그래밍 하는 능력을 키우는 C++
질문 있습니다.
LV07 문제 3번에 하드코딩할 2차 배열이 보여지지 않습니다확인 바랍니다!
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
제품이동 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 시간 초과라고 뜨는데, 더 빠른 방법이 있나요??import java.io.*; import java.util.*; class Node{ int v; int c; Node(int v, int c){ this.v=v; this.c=c; } } public class Main { public static ArrayList<Node>[] graph; public static int n,m,s, e; public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); n=sc.nextInt(); m=sc.nextInt(); graph = new ArrayList[n+1]; for(int i=1;i<=n; i++) graph[i] = new ArrayList<>(); for(int i=0; i<m; i++) { int a=sc.nextInt(); int b=sc.nextInt(); int c=sc.nextInt(); graph[a].add(new Node(b,c)); graph[b].add(new Node(a,c)); } s=sc.nextInt(); e=sc.nextInt(); int lt=1; int rt = 1000000000; int answer=0; while(lt<=rt) { int mid = (lt+rt)/2; if(count(mid)==1) { //e정점까지 갈 수있으면 answer=mid; lt = mid+1; //최대의 답을 찾아야하니까 } else rt = mid-1; } System.out.print(answer); } public static int count(int limit) { int[] ck = new int[n+1]; Queue<Node> q = new LinkedList<>(); q.add(new Node(s,0)); ck[s]=1; while(!q.isEmpty()) { Node now = q.poll(); int nowx = now.v; int nowc = now.c; for(Node ob : graph[nowx]) { if(ob.c>=limit && ck[ob.v]==0) { q.add(new Node(ob.v, ob.c)); ck[ob.v]=1; } } } return ck[e]; //마지막 점까지 갈수 있다면 1리턴, 아니면 0리턴 } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
DP 풀이방법에 있어 탑바텀, 바텀업 풀이 방식의 선택 방식
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 ^^강의 너무 잘 듣고 있습니다. DP 문제를 풀다보면.., 시작하기 전에 해당 문제를 바텀업으로 풀어야할지, 탑바텀으로 풀어야할지 어떻게 결정할 수 있을까요?제 느낌은 바텀업풀이가 점화식을 유도할 수 있다면 코드 자체가 간단하여(재귀호출x) 구현 난이도가 쉬운데, 점화식을 생각하는 과정이 경우에 따라 매우 어려운것 같습니다. 탑바텀 풀이는 완전탐색과 동일한 상태에서 메모이제이션 을 잘 정의함으로써 문제를 풀 수 있는데, DP배열의 상태정의를 어떻게 하느냐에 따라, 테스트케이스는 맞지만 제출시 틀리는 결과가 나오는 경우가 종종있습니다 (구현에서 실수 잦음) 어떤 식으로 DP의 풀이를 결정하고 문제를 들어가는지 질문드려요. 감사합니다.!!
-
해결됨C개발자를 위한 최소한의 C++
임시 객체와 보이지 않는 복사 생성 강의 질문
임시 객체 개념 자체가 많이 낯설어서 2가지 질문을 해보려고 합니다 ㅠㅠ클래스가 함수의 매개변수나 반환자료형일 경우, 상수형 참조를 하라고 하셨는데특별히 이렇게 해야하는 이유가 있는걸까요??19분쯤에 등장하는 예제에서 함수의 매개변수를 상수형 참조로 바꿔도 여전히 변환생성자가 불러와지는 걸 봤을 때는 특별히 차이점이 있어보이지 않습니다... 17분 50초 쯤에 등장하는 '비const 참조는 lvalue에만 바인딩할 수 있습니다" 라는 오류가 등장하는데 이 오류가 이해가 되질 않습니다..
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
송아지 찾기2 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래와 같이 작성했는데, 4번째 테스트 케이스에서 답이 출력 되지 않습니다. 어디가 잘 못된건지 궁금합니다.import java.io.*; import java.util.*; public class Main { public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); int s=sc.nextInt(); int e=sc.nextInt(); int k=sc.nextInt(); int[] ck = new int[10001]; for(int i=0; i<k; i++) { //웅덩이 체크 int a=sc.nextInt(); ck[a]=1; } Queue<Integer> q = new LinkedList<>(); q.add(s); int L=0; while(!q.isEmpty()) { int len = q.size(); for(int i=0; i<len; i++) { int now = q.poll(); if(now==e) { System.out.print(L); System.exit(0); } for(int nx : new int[] {now-1,now+1,now+5}) { if(nx>=1 && nx<10001 && ck[nx]==0) { //이동할 수 있는 범위이고, 아직 방문 안했고, 웅덩이가 아니라면 ck[nx]=1; q.add(nx); } } } L++; } } }