묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문
이게 원말인지 모르겠습니다 ㅠㅠ....
강의대로 따라했는데, " 식에 클래스 형식이 있어야하는데, char형식이 있음"이라고 뜨는데, 무슨 말인지 모르겠습니다...
-
미해결[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문
포인터 문자열 할당시 +1해주는 이유
안녕하십니까section2의 포인터와 배열/문자열 강의의 예시 중 ps = new char[strlen(animal)+1]; 부분에서 +1을 해주는 이유가 무엇인가요?null값과 관련되었다고 예상되는데 만약 그렇다면null값이 필요한 string과 달리 char형은 '\n'과 같은 null값이 없어도 된다고 알고 있습니다.1byte더 큰 크기 할당이 왜 필요한가요?
-
해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
64번 스택 오버플로우 뜨는 이유가 궁금합니다!
제가 푼 방식은 정점이 n번까지 다다르면 카운트를 하나 올리고 방문여부를 체크하던 배열을 원상태로 초기화하는 방법입니다.근데 이게 m이 작을 때는 잘 작동하는데 m이 커지는 순간 스택 오버플로우가 발생합니다..! 손그림 그려서 해봤는데 스택 오버플로우가 발생할 것 같기도 하고 왜 발생하는 건가 싶기도 해서 질문드립니다...(너무 긴가민가해서 좀 더 명쾌한 이유를 알고 싶어서요 ㅠㅠ)#include<iostream> using namespace std; #include<vector> #include<algorithm> #include<string> int n, m; // 정점 n개, 간선 m개 vector<vector<int>> adjacent; // -1은 연결 없음 vector<int> visited; int ans = 0; void DFS(int pre) { if (pre >= n) // n에 다다르면 카운트 증가, 방문 배열 초기화 { ans++; visited.clear(); visited.resize(n + 1, 0); return; } visited[pre] = 1; // 일단 방문했으니 체크 for (int i = 1; i <= n; i++) { // 방문한 적 있거나 연결 끊겨있으면 continue해서 무시 if (visited[i] == 1 || adjacent[pre][i] == -1) continue; DFS(i); // 그 외라면 DFS 재귀호출 } } int main(void) { cin.tie(NULL); ios_base::sync_with_stdio(false); freopen("input.txt", "rt", stdin); // 파일 입력받음 cin >> n >> m; adjacent.resize(n + 1, vector<int>(n + 1, -1)); for (int i = 0; i < m; i++) { int s, e; // 시작 정점, 도착 정점 cin >> s >> e; adjacent[s][e] = 1; } visited.resize(n + 1, 0); DFS(1); cout << ans; }아 그런데 스택 오버플로우 생기는 것 땜에 강사님 설명 봤고, 설명을 통해 고친 내용은 완벽히 이해된 상태입니다! 그냥 스택 오버플로우 발생 이유를 정확히 알고 싶어 질문드립니다 감사합니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
트리를 그리는 방식이 이해가 가지 않습니다 ㅜ
http://boj.kr/5128abfdc4364c3d8f22f41b1ecc30f4테스트 케이스가 모두 맞긴 하는데 계속 틀려서 질문 게시판을 보니 어떤 분께서 루트가 무조건 0이 아닌 케이스들이 있다며(https://www.acmicpc.net/board/view/104534) 예시를 드셨는데요. 해당 예시가 어떤 순서로 형성되는 것인지 잘 이해가 가지 않습니다.. ㅜ 루트 노드가 어떻게 4가 되는지?4의 자식 노드들의 노드 번호가 어떻게 3,5가 되는 것인지 등등 입니다!
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
채점프로그램 구동 문제
안녕하세요 수업 열심히 듣고 따라가는 학생입니다!37번 문항에 질문 및 문제가 생겨 문의드립니다. 아래와 같은 코드를 작성했고, 이를 실행 후 채점폴더를 활용해 채점했을때 test 3,4,5번에서 exit_code 에러가 발생합니다.#include <iostream> using namespace std; int scan(int n, int* arr, int len); int main() { int S; int N; int scanres; cin >> S >> N; int* cache = new int[S](); int* work = new int[N]; for(int i = 0; i<N; i++){ cin >> work[i]; } cache[0] = work[0]; for(int i = 1; i<N; i++){ scanres = scan(work[i], cache, S); if(scanres != -1){ //캐시에 있다 for(int j = scanres - 1; j >= 0; j--){ cache[j+1] = cache[j]; } cache[0] = work[i]; } else{ //캐시에 없다 for(int j = S-1; j >= 0; j--){ cache[j+1] = cache[j]; } cache[0] = work[i]; } } for(int i = 0; i<S; i++){ cout << cache[i] << " "; } return 0; } int scan(int n, int* arr, int len){ for(int i = 0; i < len; i++){ if(arr[i] == n) return i; } return -1; }아무리 봐도 문제를 모르겠어 input 3,4,5를 열고 제 코드에 대입해 실행해본 결과 output 3,4,5와 일치하는 결과가 출력되었습니다.아래 그림에서 왼쪽은 채점프로그램 점수이고, 오른쪽 위는 input 3 프로그램 실행시 결과, 그 아래는 output 3 파일입니다. input3 실행결과와 output3 결과가 일치하는것을 확인하실 수 있습니다.어느부분에서 에러가 나는 것인지 조언 부탁드리겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-A 일곱난쟁이를 예로 들어 코테의 문제 조건 적용 범위 질문
http://boj.kr/35d6f320e0d042ea9331b757b1e5bf15안녕하세요 위 링크에 제가 작성한 코드가 있습니다.일단 제가 알고리즘 문제를 풀어보는게 이 문제가 처음이라서, 문제에 제시된 조건을 코드에 어느정도로 적용해야 하는지 감이 안잡히는것 같아서 질문올립니다.뭔소리냐면 예를 들어 이 일곱난쟁이 문제를 처음 딱 봤을때 저는,"주어지는 키는 100을 넘지 않는 자연수""아홉 난쟁이의 키는 모두 다르며"라는 두가지 입력 조건이 있다고 인식을 했고, 두 조건의 코드 구현에 대해 고민하는데에 1시간을 썼지만 결국 첫번째 조건에 대해서만 코드로 구현하는 데 성공했습니다.if(a[i]<1 || a[i]>100){cout << "1~100 사이의 수를 입력하세요!" << "\n";a[i] = 0;i--;continue;}<< 이 부분이 첫번째 조건을 구현한 부분입니다."100을 넘지 않는 자연수" 이외의 숫자를 입력 시 경고문구와 함께 입력한 숫자가 없어지고 그 자리에 다시 입력하도록 하는 코드입니다.(두번째 조건인 "입력 숫자는 중복이 불가"도 나름 고민을 해봤지만 도저히 컴파일 결과가 원하는 대로 안나와서 일단 그부분은 지우고 위의 링크 상태로 백준에 제출한 것입니다.)컴파일 시 문제의 예제입력1을 넣으면 예제출력1과 동일하게 결과가 나오지만, 백준 결과는 틀렸다고 나왔습니다.그래서 뭐가 틀렸나 강의와 모범답안을 확인해보니 제가 고민했던 조건 2가지에 대한 코드가 답안에는 아예 없더라구요?!바로 이 부분에서 제가 혼란이 와서 질문드립니다ㅠ제 생각엔 제시된 예제입력 외의 모든 상황에서도 결과가 똑바로 나와야 하기 때문에, 숫자 입력 시 -1이나 200같은 범위 외 숫자를 입력하거나 이미 입력한 숫자를 또 입력할 경우는 문제에 제시한 조건에 부합하지 않아 결과가 바르지 않으므로, 애초에 코드 짤때부터 이 모든 부분을 방지해야 한다고 생각을 했는데, 이런 생각 자체가 너무 깊게생각한걸까요?앞으로 모든 문제에 있어서 이런 식으로 문제에서 구현 조건처럼 보이는 문구들이 있어도 전부 구현할 필요 없이 단순히 제공된 예제의 케이스만 바르게 나오도록 간소화해서 코드를 짜면 되는건지..그 조건 적용 범위나 기준이 암묵적으로 있는지 이런 것들이 궁금합니다. 확실히 이부분을 고려해서 코드를 짜냐 안짜냐가 소요 시간에 엄청난 영향을 끼치니까요ㅠㅠ아, 그리고 추가로 이번 난쟁이의 경우처럼 제가 모범답안 외 추가적으로 작성한 코드에 의해 컴파일은 잘 되지만 백준 결과가 틀렸다고 나올 경우에 제가 작성한 부분을 뇌에서 지우고 그냥 모범답안으로 외워야 할까요? 아니면 해당 부분이 제 생각에 문제 논리를 거스르지는 않는 부분이라고 판단되면 그냥 제가 생각한 로직대로 기억해도 되는걸까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-A 질문
강의를 안보고 처음 짠 코드에서 무엇이 잘못됬는지 몰라서 답답해서 질문드립니다.이 코드의 반례를 알 수 있을까요? 혹은 어느 부분이 틀렸는지입니다. #include <iostream> #include <cstring> #include <climits> #include <algorithm> using namespace std; int n; int dp[20][20][20]; int w[20][20]; int visit[20]; //bidx == 시작한 처음 위치 void search(int cnt, int from, int dist, int bidx) { if (cnt == n - 1 && w[from][bidx] > 0) { int nd = dist + w[from][bidx]; if (dp[from][bidx][cnt] < nd) return; dp[from][bidx][cnt] = nd; return; } for (int i = 0; i < n; ++i) { if (from == i || visit[i] || w[from][i] == 0) continue; int nd = dist + w[from][i]; if (dp[from][i][cnt] > nd) { dp[from][i][cnt] = nd; visit[i] = 1; search(cnt + 1, i, nd, bidx); visit[i] = 0; } } } int main() { cin >> n; for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) { cin >> w[i][j]; } for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) for (int k = 0; k < n; ++k) dp[i][j][k] = INT_MAX; for (int i = 0; i < n; ++i) { memset(visit, 0, sizeof(visit)); visit[i] = 1; search(0, i, 0, i); } int answer = INT_MAX; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { answer = min(answer, dp[i][j][n - 1]); // cout << dp[i][j][n - 1] << " "; } // cout << "\n"; } cout << answer; return 0; } 접근 방법은 3차원 dp를 dfs로 탐색한 거리를 저장해두는 것입니다. 그래서 다음에 같은 dp[from][to][cnt] 가 존재할 때, 반드시 새로운 값이 낮을 때만 재귀를 수행하게 됩니다.재귀 끝내는 파트인 cnt == n- 1에서는 모든 노드를 순회했고 시작부분을 더하기 위해 w[from][bidx] 가 0이 아닌 경우에만 값을 구하게 됩니다. 그래서 마지막 dp[][][n-1] 중 가장 작은 값을 정답으로 가져옵니다.백준 질문하기에서 대부분 반례를 시도해보고 디버깅도 시도해봤는데 뭐가 잘못됬는지 알기 어려워 답답한 마음에 질문드립니다.
-
미해결홍정모의 따라하며 배우는 C++
4.5 강의: int -> float type conversion은 4byte니까 문제 없나요?
int iii = 1234; float ff = iii; cout << std::setprecision(12) << ff << endl; 위 예시를 보여주신 의도를 알고 싶습니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-O 왜 틀렸다고 나오는 것일까요??ㅜㅜ
큰돌님 강의를 보고 혼자서 다시 풀어보았는데 저는 bool타입의 check변수를 사용하지 않고 풀어봤습니다. 그런데 그 결과 틀렸다고 뜨더군요ㅜㅜㅜ... 반례가 무엇인지 정말 궁금해요 #include <bits/stdc++.h> using namespace std; string s, n; int main() { ios_base::sync_with_stdio(false); cin.tie(0); while(true) { stack<char> stk; bool flag = true; getline(cin, s); if(s == ".") break; for(int i = 0; i < s.size(); i++) { if(s[i] == '(' || s[i] == ')' || s[i] == '[' || s[i] == ']') { if(!stk.size()) { stk.push(s[i]); continue; } if(s[i] == '(' || s[i] == '[') stk.push(s[i]); else if(s[i] == ')') { if(stk.top() == '(') stk.pop(); } else if(s[i] == ']') { if(stk.top() == '[') stk.pop(); } } } if(stk.size()) cout << "no" << "\n"; else cout << "yes"<< "\n"; } return 0; }
-
미해결홍정모의 따라하며 배우는 C++
Something class 안에잇는 B 클래스속 m_b는 출력을 어떻게해야하나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래에 동일질문들이 보이지만 뚜렷한 답변이 없는거같아서 질문드립니다. class안에 있는 class속 m_b를 출력하기위해 B란 클래스속에 print_B라는 함수를 만들어봤지만 int main에서 B 안에 print_B() 함수를 어떻게 들어가야할지 모르겠습니다. something속 print()함수는 som.print()로 들어가지니까 B class 속 print_B는 som.m_b.print_B()로 해야할거같은데 안되네요.제코드는 이렇습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R 질문있습니다
안녕하세요 선생님.저는 DFS 함수를 리프노드인지 체크하고, 리프노드가 맞으면 cnt++하고 리턴, 아니면 다시 탐색하는 식으로 했는데 제출하면 틀렸다고 나옵니다.. 코드를 한번 봐주실수 있으실까요??http://boj.kr/64c5061800704ee4b0e6ab731133f0b4
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
개념강의
안녕하세요 선생님혹시 개념강의는 pdf파일이 없을까요?!
-
미해결홍정모의 따라하며 배우는 C++
솔루션폴더안에 프로젝트 폴더에 직접적으로 cpp파일을 넣어줘도 비주얼스튜디오 source files에는 cpp파일이 뜨질않습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.cpp파일을 다른 프로젝트폴더로 옮기고 싶어서 솔루션폴더안에 직접적으로 넣어줬는데 비주얼스튜디오에선 보이질않네요.vs코드에선 폴더안에 파이썬코드를 넣어주면 vs코드 프로그램에서도 자동으로 파일이 업데이트됐는데 비주얼 스튜디오는 안되는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
vector<int>v(n) 과 vector<int>v[n] 차이
안녕하세요 선생님vector<int>v(n) 과 vector<int>v[n] 차이 가 뭔가요?!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-Q 입력값이 전부0인경우는 고려하지 않는 문제일까요?
5 5 0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0 이렇게 입력하면 1 0 이렇게 출력되는데 아예 치즈가 없으면 0 0 이렇게 나와야 하지 않나요 근데 맞다고 해줘서요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[투포인터 유형] 백준 3273 두 수의 합 질문
<< 코드는 하단에 링크로 첨부하였습니다. >>안녕하십니까 큰돌 선생님백준 3273 두 수의 합 문제를 30분 여유 시간 안으로 생각하고 먼저 풀어보려고 했는데 틀렸다고 나와서 질문 드리려 합니다.문제에서 보여준 예제 경우는 정답이 맞게 나왔지만 3% 쯤에서 틀렸다고 나옵니다. 그런데 왜 틀렸는지 모르겠습니다.수열을 정렬하고, 오른쪽 j인덱스를 줄여나가면서 왼쪽 i의 0번째 부터 탐색하면서 x와 값이 같으면 cnt++ 하는 로직을 떠올리고 구현했습니다.선생님이 작성하신 코드의 로직과 어떤 차이가 있는 것인지 파악을 못해서 틀린 것 같습니다. 제 코드를 봐주시고 피드백 주시면 감사하겠습니다.Q1. 위에서 설명한 저의 로직이 어떤 부분에서 부족한가요?Q2. 선생님의 코드와 비교해서 분석한다면 어떤 부분이 다른건가요?읽어주셔서 감사합니다..http://boj.kr/ee88cf1f8b544d1cb9dfb0617b018d9a PS. 선생님 덕분에 타기업 코테도 풀어볼 수 있었습니다. 쨔쓰!비록 면접도 전에 탈락했지만 자신감 얻고 쭉쭉가겠습니다. 이왕 이렇게 된 거 코테 마스터 하겠습니다... (대충 질문 폭격해서 괴롭힐 수 있다는 떡밥)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
10주완성에서 제일 어려운 문제 백준 난이도가 몇인가요?
혹시 플래티넘 문제도 있나요? 강의를 다 듣고 나면 골드 문제를 양치기를 해서 실버를 넘어 골드를 지나 언젠가 플레를 가고 싶은데 현실적으로 시간이 없어서 코테 기출을 많이 볼거같네요
-
해결됨홍정모의 따라하며 배우는 C++
3.6 논리연산자 9분 55초
x = 5, y = 5의 경우x equals y가 출력되는데, 선생님께서 x와 y가 같다고 잘못 결과를 내고 있다고 하시는데...왜 결과가 잘못 나온 건가요?ㅠㅠx와 y가 똑같이 5인데 뭐가 잘못된 건지 잘 모르겠습니다ㅠㅠ
-
해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
24번 jolly jumpers 무엇이 문제일까요?
//24 jolly jumpers // 5번 케이스에서 NO가 나와야 하는데, YES가 나옵니다. // 배열 인덱스 범위를 조절하는 코드를 추가하면 문제야 잘 해결된다지만, // 왜 5번케이스에 대해서 YES가 뜨는지 궁금합니다! #include <stdio.h> #include <cmath> using namespace std; int arr[105]; int N, i, a, b,subs; int main(void){ scanf("%d", &N); scanf("%d", &a); for(i=1; i<N; i++){ scanf("%d", &b); subs = abs(a-b); a=b; if(arr[subs]!=0) { printf("NO"); return 0; } arr[subs]++; } for(i=1; i<=N-1; i++){ if(arr[subs]==0) { printf("NO"); return 0; } } printf("YES"); return 0; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
알고리즘교안 p121 구조체를 담은 우선순위큐 질문
안녕하세요 교안공부중에 모르는 부분이 있어 질문드립니다.교안 p121을 보면 구조체를 담은 우선순위큐에서 따로 sort()등의 함수를 사용하지 않고 데이터를 .push() 만 했을 뿐인데 출력하니 구조체 안에 선언된 연산자 오버로딩에 따라 정렬된 값을 출력하더라구요어떤 방식으로 이게 가능한건가요? 우선순위 큐 자료구조만의 특징인가요? 이해가 잘 되지 않아서 vector를 이용하여 같은 방식으로 해보니 따로 정렬이 되지 않더라구요 교안 P121에 나온 '구조체를 담은 우선순위큐' 코드 #include <bits/stdc++.h> using namespace std; struct Point{ int y, x; Point(int y, int x) : y(y), x(x){} Point(){y = -1; x = -1; } bool operator < (const Point & a) const{ return x > a.x; } }; priority_queue<Point> pq; int main(){ pq.push({1, 1}); pq.push({2, 2}); pq.push({3, 3}); pq.push({4, 4}); pq.push({5, 5}); pq.push({6, 6}); cout << pq.top().x << "\n"; return 0; } 제가 작성한 vector를 이용한 코드는 다음과 같습니다#include <bits/stdc++.h> using namespace std; struct Point { int y, x; Point(int y, int x) : y(y), x(x) {} Point() { y = -1; x = -1; } bool operator < (const Point & a) const { return x > a.x; // x 멤버변수를 기준으로 내림차순 정렬 } }; vector<Point> v; int main() { v.push_back({1, 1}); v.push_back({2, 2}); v.push_back({3, 3}); v.push_back({4, 4}); v.push_back({5, 5}); v.push_back({6, 6}); for(auto a : v) cout << a.y << " : " << a.x << '\n'; return 0; } 앞쪽에 보면 operator 연산자 오버로딩을 구조체안에 선언하지 않고 따로 cmp함수로 만들어 sort() 함수에 3번째 인자로 넣어서 정렬하는것은 이해하였습니다.위의 코드에서 제가 잘못 작성한 부분이 있어서 정렬이 안되는건지, 아니면 우선순위큐 자료구조만 가능한 코드인것인지 아니면 아예 제가 뭔가를 잘못 이해하고 있는건지 잘 모르겠습니다.ㅠ