월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 문제 3 ~ 5번에 문제가 있는것 같습니다.
코드를 작성하고 돌려보니1 ~ 2 pass였지만 나머지 3 ~ 5번에서 문제가 발생하였습니다.그래서 코드를 다시 확인을 해봐도 원인를 못 찾았다.그래서 강사님의 코드로도 체점을 진행해보니 동일한 결과가 발생하였습니다.그래서 in 3 ~ 5을 보니 문제와 다르게 배열의 크기가 100,000 으로 설정되어 있는 것을 발견하였습니다.아마 제 예상으로는 in 3 ~ 5까지의 문제가 다른 문제로 바꾼 것 같습니다. 한번 확인해주시면 감사합니다.
- 미해결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문을 돌리면 될까요?다른 좋은 방법이 있을지 문의드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 이진검색에 대한 문의
문제가 순서가 바뀌는 것이 불가능하다고 나와있습니다.이분검색은 정렬된 자료를 이용해서 정렬하는것으로 알고 있는데 만약 곡 시간이 432324 이렇게 나와있다면 이분검색 자체를 못하는것 아닌가요???
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문 있습니다
#include <iostream> #include <vector> #include <algorithm> using namespace std; int n; int maximum=-2147000000; vector<pair<int, int>> A; void DFS(int day, int now_day, int income); int main(){ cin >> n; for(int i=1; i<=n; i++){ int a, b; cin >> a >> b; A.push_back(make_pair(a, b)); } for(int i=1; i<=A.size(); i++){ DFS(A[i].first, i, 0); } cout << maximum; } void DFS(int day, int now_day, int income){ if(day>n){ if(income>maximum) maximum=income; return; } else if(day==n){ income+=A[now_day].second; if(income>maximum) maximum=income; return; } else{ income+=A[now_day].second; for(int i=day+1; i<=n; i++){ DFS(day+A[i].first, i, income); } } }해당 코드로는 알맞는 정답이 출력되지 않는데, 그 이유를 모르겠습니ㅏㄷ.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
for문 변수 초기화 방법
선생님께서는 강의에서j=0으로 밖에서 초기화하셨는데 이 부분에 대해서 이유를 말씀해주시지 않아서 궁금합니다. 평소대로 for(j=0; j<n; j++)로 작성하면 답이 다르게 나오던데 그 이유를 모르겠습니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
다섯번째 테스트 케이스 채점결과 exit_code_-1073741819
#include <stdio.h> int main() { //freopen("input.txt","rt",stdin); int n,abs,left,right,res=1; scanf("%d",&n); int a[n]={0,}; scanf("%d",&left); for(int i=1;i<n;i++){ scanf("%d", &right); abs=(right-left>0)?right-left:left-right; a[abs]=1; left=right; } for(int i=1;i<n;i++){ if(a[i]!=1) res=0; } if(res==1){ printf("YES\n"); } else{ printf("NO\n"); } return 0; }강의 듣기 전 스스로 짠 코드입니다. 채점결과 마지막 케이스만 이렇게 출력되는데 다섯번째 파일만 따로 돌려봐도 에러없이 종료되어서 원인을 잘 모르겠습니다ㅠㅠ
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 배열 크기 문제
문제에는 첫째 줄에 자연수 N(1≤N≤1,000)이라고 나왔습니다만채점 프로그램의 in3~in5까지의 n 입력값은 1000을 넘어갑니다 (100,000) a의 배열의 사이즈는 1001(1000개)인데 n을 100,000으로 받아도 문제 없이 정답이 잘 나옵니다 배열의 사이즈를 넘어가는데 정답이 잘 나오는 이유를 모르겠습니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
프로그래머스 추천문제
안녕하세요 강의를 끝까지 거의 수강하고 프로그래머스 추천문제를 풀고있습니다.그런데 문제 추천 텍스트파일에 split함수쓰기라고 되어있는 문제가있는데C++에는 split기능이 없지않나요?? 파이썬에 대한 말씀이신지 궁금해서 질문드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
이 코드는 왜 YES만 Success인가요?
안녕하세요.선생님.영상도 참고하면서 제 방식대로 조금 짜봤는데 잘 안되서 여쭤봅니다.#include <bits/stdc++.h> using namespace std; int n, res = 0; int a[101]; int main() { cin >> n; vector<int> ch(n); for(int i = 0; i < n; i++) { cin >> a[i]; } for(int i = 0; a[i]!='\0'; i++) { res = abs(a[i]-a[i+1]); if( res > 0 && res < n && ch[res] == 0 ) { ch[res] = 1; } } // 이 부분입니다. for(int i = 0; ch[i] != '\0'; i++) { if(ch[i] == 0) { cout << "NO"; return 0; } } cout<<"YES"; return 0; }3번째 for문에서 i < n을 하면 NO부분에서만 success가 뜨고 위와 같이 하면 Yes부분에서만 Success가 뜹니다.도움부탁드리겠습니다.감사합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
7번 다양한 풀이 도전 중 오류
7번을 강의해주신 대로도 풀어보고 다른 형식으로도 풀어보고 싶어서 다음과 같은 코드를 짜봤는데, 대문자에서 소문자로 변환은 잘 이루어지지만 중간에 포함된 띄어쓰기가 나타나면 거기서 멈춘 상태로 출력이 됩니다. 이유, 그리고 어떻게 수정해야 할 지가 궁금합니다.예시) 입력: BeA UT I ful, 출력: bea #include <iostream>#include <vector>#include <algorithm>#include <string>using namespace std;int main(){ ios::sync_with_stdio (false); cin.tie (NULL); cout.tie (NULL); string str; cin >> str; vector<char> answer; for(int i=0; i<str.size(); i++){ if(str[i]!=' '){ if(str[i]>=65 && str[i]<=90){ answer.push_back(str[i]+32); } else{ answer.push_back(str[i]); } } } for(int i=0; i<answer.size(); i++){ cout << answer[i]; }}
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
채점이 안돼요
비쥬얼스튜디오로 하는데 져지에서 이렇게 뜹니다ㅠㅠ 도와주실수 있나요??
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
4번 나이차이 문제
#include <iostream> using namespace std; int main() { int n,a; int max = 0; int min = 0; cin >> n; for (int i = 1; i <= n; i++) { cin >> a; if (a > max) { max = a; } if (a < min) { min = a; } } cout << max - min; return 0; }이렇게 했을 때 값이 제대로 나오지 않습니다.초기화 부분에서 max와 min에 0을 넣으면 왜 값이 다르게 나오나요..?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
섹션5 7번 문제 알리바바와 40인의 도둑 설명이 잘못된건지 제가 잘못 이해하는 건지 확인 부탁드립니다.
안녕하세요, 섹션5 7번 문제 알리바바와 40인의 도둑 설명 중에, 오른쪽 또는 아래쪽으로만 간다고 말씀하셨는데,만약 돌다리가 아래와 같이 주어지면, 7*7 행렬에, 0 index 부터 시작한다고 했을 때,1 9 9 9 1 1 11 1 1 1 9 9 19 9 9 9 9 9 19 9 9 9 9 9 19 9 9 9 9 9 19 9 9 9 9 9 19 9 9 9 9 9 1이 경우에는 (0,0)->(1,0)->(1,1)->(1,2)->(1,3)->(1,4)->(위로 이동)->(0,4)->(0,5)->(0,6)->...이렇게 해서 위로 이동하는 경우가 있어야 최소 비용으로 갈 수있는 것 아닌가요?....
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
10 자릿수의 합 관련 질문
안녕하세요, 강사님. 10번 자릿수의 합 문제 관련해서 작은 질문이 있습니다.각 자리수의 합은 당연히 0보다 클 수밖에 없기 때문에 max의 값을 0으로 하고 문제를 풀었는데요.-2147000000 대신 0으로 해도 무방할까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
안녕하세요 89: 토마토 문제 관련 질문있습니다!
강의 항상 잘듣고있습니다!89 토마토 문제 관련 제가 짠 코드에서 결과값은 문제 없이 나오지만 컴파일러가 아래와 같은 New_allocator 창을 띄우면서 pause 되는 문제가 있는데 코드를 아무리 봐도 에러가 왜 발생하는지 모르겠어서 질문 올립니다 . #include<iostream> #include<vector> #include<algorithm> #include<cmath> #include<queue> using namespace std; //넘겨야할 인자가 x,y,day 세개라서 class 필요 class Tmt{ public: int x; int y; int day; Tmt(int a, int b , int c){ x = a; y = b; day = c; } }; int main(){ freopen("input.txt","rt",stdin); int m,n; cin >> m >> n; // m = j = 가로 // n = i = 세로 vector<vector<int>>map(m+2,vector<int>(n+2,1)); //얘는 어차피 익으면 1로바뀌니까 ch가 따로 필요없을 것 같음. //vector<vector<int>>ch(n+2,vector<int>(m+2,0)); queue<Tmt>q; //상하좌우 탐색용 방향벡터 int dx[] = {1,0,-1,0}; int dy[] = {0,1,0,-1}; // input 읽어오는 동시에 초기 셋팅값 확인하기 int flag = 0; // flag 1 = 값이 1인 좌표 존재 for(int i = 1; i<=n ; i++){ for(int j = 1 ; j <=m;j++ ){ int temp; cin >> temp; map[i][j] = temp; if(map[i][j]==1){ flag = 1; // x,y 좌표 및 초기 0 day 삽입 및 ch 체크 q.push(Tmt(j,i,0)); } //cout << map[i][j]; } //cout << "\n"; } if(flag == 0){ //익은게 하나도없어서 결국 아무것도 안변함 -1반환 cout<<-1; return 0; } if(q.size() == n *m){ //시작때부터 다 익어있음 cout<<0; return 0; } int res = 0; //초기 setting된 q 활용해서 day 진행 while(!q.empty()){ Tmt temp = q.front(); int t_x = temp.x ; int t_y = temp.y; int t_day = temp.day; res = t_day; cout << " t_x: " << t_x << " t_y: "<<t_y<<" t_day: "<<t_day << "\n"; q.pop(); for(int i = 0; i<4;i++){ //cout <<" t_x+dx[i]: " <<t_x+dx[i] << " t_y+dy[i]: "<<t_y+dy[i] << " m: " << m << " n: "<<n << "map[t_x+dx[i]][t_y+dy[i]]: "<<map[t_x+dx[i]][t_y+dy[i]]<<"\n"; if((0<t_x+dx[i]<=m) && (0<t_y+dy[i]<=n) &&(map[t_y+dy[i]][t_x+dx[i]] == 0)){ //cout <<" t_x+dx[i]: " <<t_x+dx[i] << " t_y+dy[i]: "<<t_y+dy[i] << " m: " << m << " n: "<<n<<"\n"; map[t_y+dy[i]][t_x+dx[i]] = 1; q.push(Tmt(t_x+dx[i],t_y+dy[i],t_day+1)); } } } cout << res; return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
[질문은 아니고 해결법&코드 공유] deque로 풀어봤어요!
저는 37번 LRU 문제를 Deque랑 삽입 정렬로 풀었습니다.삽입 정렬은 강사님 설명대로 반복된 입력값을 정렬시킬 때 사용했습니다. deque는 캐시메모리 크기를 초과할 때 pop(제거)를 위해 사용했습니다. 처음에는 vector로 풀었는데, 이럴 경우입력값 : 1 2 3 2 6 2 3 5 7index :0 1 2 3 4vector<int> v :1 6 2 3 5에서 처음 입력됐던 1이 삭제돼야하는데, vector는 pop_back()만 있어서 앞쪽인 1이 아니라 뒤쪽인 5가 삭제됩니다. 그래서 pop_front() 혹은 pop_back()랑 push_front가 동시에 컨테이너가 없을까 찾아보다가, 양방향 입력/제거 가능한 deque를 사용했습니다!(queue도 앞으로 들어오고 뒤로 나가는 거지만 정렬하기 힘드니까 패스!) 아래 코드 첨부합니다!최근에 해시 공부하면서 익힌 iterator(반복자)도 사용했는데, iterator가 처음이신 분들은 대충 index처럼 요소 접근하는걸로 이해해주시면 됩니다!(정확히는 주소 접근이지만!) #include<iostream> #include<deque> #include<algorithm> using namespace std; int main() { int S{}, N{}; deque<int> dq; // 중복 값 정렬 cin >> S >> N; for (int i = 0; i < N; i++) { int tmp{}; cin >> tmp; // 중복값 찾기 deque<int>::iterator it = find(dq.begin(), dq.end(), tmp); if (it == dq.end()) dq.push_front(tmp); // 중복 없으면 그냥 앞에서 삽입 else { // 중복값 있다면 // (tmp = *it을 할 필요없음 : 그 값이 그 값이니까) // 하나씩 뒤로 밀기. 제일 앞쪽에 도착하면 it-1을 못하니까 반복 종료 for (it; it != dq.begin(); it--) { *it = *(it - 1); } *it = tmp; } // 제일 뒤쪽 삭제 if (dq.size() > S) dq.pop_back(); } for (int i = 0; i < dq.size(); i++) cout << dq[i] << " "; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
5번 채점파일에 문제가 있는거 같습니다.
#include <iostream> #include <string> using namespace std; int main() { string num; char mw; int i, age=0; getline(cin, num); int n = num.find("-", 1); if(num[n+1] == '1') { mw = 'M'; age = 2019 - (1900 + ((num[0]-48)*10 + (num[1]-48))); } else if( num[n+1] == '3') { mw = 'M'; age = 2019 - (2000 + ((num[0]-48)*10 + (num[1]-48))); } else if(num[n+1] == '2') { mw = 'W'; age = 2019 - (1900 + ((num[0]-48)*10 + (num[1]-48))); } else if(num[n+1] == '4') { mw = 'W'; age = 2019 - (2000 + ((num[0]-48)*10 + (num[1]-48))); } cout << age+1 << " " << mw; }5번에서 제가 작성한 코드인데요. 채점이 Exception.Tostring오류로 아예 채점이 안돼서 직접 In,out 파일을 넣어가며 비교를 해봤는데 오류없이 정답이 잘 나오더라고요. 이 부분 혹시 확인 가능할까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 뮤직비디오 질문
안녕하세요 강사님 🙂43번 뮤직비디오의 채점 폴더의 2번 케이스의 output이 23이 되어야 하는게 아닌지 질문드립니다.현재 2번 케이스<input>10 36 5 8 5 6 8 7 6 6 7<output>24배열 정렬, 5 5 6 6 6 6 7 7 8 8(5, 5, 6, 6) (6, 6, 7) (7, 8, 8)(5, 5, 6, 6) = 22(6, 6, 7) = 19(7, 8, 8) = 2324가 아닌 23이 최소 비용이 되는 값이 아닌지 질문드립니다제가 작성한 코드void swap(int* a, int* b) { int temp = *a; a = b; *b = temp; } int partition(int arr[], int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; swap(&arr[i], &arr[j]); } } swap(&arr[i + 1], &arr[high]); return i + 1; } void quickSort(int arr[], int low, int high) { if (low < high) { int pivotIndex = partition(arr, low, high); quickSort(arr, low, pivotIndex - 1); quickSort(arr, pivotIndex + 1, high); } } int main() { int N, M; scanf_s("%d%d", &N, &M); int* pN = (int*)malloc(sizeof(int) * N); for (int i = 0; i < N; i++) { scanf_s("%d", &pN[i]); } // 배열 정렬 quickSort(pN, 0, N - 1); int lt = 1, rt = 0; // 배열의 모든 요소를 더하여 rt 초기화 for (int i = 0; i < N; i++) { rt += pN[i]; } while (true) { int cnt = 0, sum = 0; int mid = (lt + rt) / 2; if (mid == lt) { printf("%d", rt); break; } if (mid == rt) { printf("%d", rt); break; } // 누적 합이 mid를 넘으면 카운트 증가 for (int i = 0; i < N; i++) { if ((sum + pN[i]) > mid) { sum = 0; cnt++; } // 마지막 배열의 경우 카운트 증가 if (i == N - 1) cnt++; sum += pN[i]; } // 카운트에 따라 이분 탐색 범위 조절 if (cnt <= M) { rt = mid; } else { lt = mid; } mid = (lt + rt) / 2; } // 동적 할당한 배열 메모리 해제 free(pN); return 0; } break; } if (mid == rt) { printf("%d", rt); break; } // 누적 합이 mid를 넘으면 카운트 증가 for (int i = 0; i < N; i++) { if ((sum + pN[i]) > mid) { sum = 0; cnt++; } if (i == N - 1) cnt++; sum += pN[i]; } // 카운트에 따라 이분 탐색 범위 조절 if (cnt <= M) { rt = mid; } else { lt = mid; } mid = (lt + rt) / 2; } // 동적 할당한 배열 메모리 해제 free(pN); return 0; }
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
60번 문제 100점 으로 나오지만 제 코드가 응용력이 떨어진다고 봐야할까요?
int n, arr[11], sum=0;void DFS(int L) { if (L > n) return; else { sum += arr[L]; DFS(L * 2); DFS(L * 2 + 1); }}int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &arr[i]); } DFS(1); if (sum % 2 == 0) { printf("YES"); } else { printf("NO"); }return 0;} 수의 합들이 2로 나누어 떨어지면 당연히 원소들의 부분집합의 합이 같으니까 더해서 sum%2==0 으로 쉽게 짰는데 강사님 풀이과정과 많이 달라서, 질문 드렸습니다