월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
혼자 해봤을 때 안되서 질문합니다.
안녕하세요 선생님. 선생님 설명을 듣고 이해가 됬다고 생각했습니다. 다 지우고 혼자 짜봤는데 테스트케이스가 100점이 안나오네요. 어디가 문제인지 모르겠습니다. 도와주시면 감사하겠습니다. #include <stdio.h> int song[1001], cnt_limit_dvd; int Count(int size){ int i = 0, cnt_dvd = 1, sum = 0; for(i=1; i<=size; i++){ // 모든 곡 순회 if(sum + song[i] > size){ cnt_dvd++; sum = song[i]; }else{ sum += song[i]; } } return cnt_dvd; } int main(int argc, char** argv){ int i = 0, cnt_song = 0; int lp = 1, rp = 0, mid = 0, res = 0; int max_value = -2147000000; //freopen("input.txt", "rt", stdin); scanf("%d %d", &cnt_song, &cnt_limit_dvd); // 곡들이 총 몇분인지 저장 for(i=1; i<= cnt_song; i++){ // 인덱스 1 부터 사용 scanf("%d", &song[i]); rp = rp + song[i]; if(song[i] > max_value) max_value = song[i]; // 제일 긴 곡 저장 } // dvd 한 개의 용량이 '제일 긴 곡'의 용량보다는 같거나 커야 한다. // 가능한 dvd 의 시간 범위 : 1분 부터 rt에 저장된 분 //이분검색 while(lp <= rp){ mid = (lp + rp) / 2; // dvd 1개의 최소 용량 if(mid >= max_value && Count(mid) <= cnt_limit_dvd){ // mid 가 답이 된다. res = mid; rp = mid - 1; } else { lp = mid + 1; } } printf("%d", res); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
선생님 언어 선택 질문드립니다.
안녕하세요 선생님. C, C++ 알고리즘 강좌 잘 보고 있습니다! 거의 다 들어가고 있는데, 요즘은 파이썬으로 하는게 시간 단축도 되고 더 괜찮다고 하더라구요. 그래서 파이썬으로 다시 공부하려고 하는데 요즘에는 파이썬이 훨씬 나으려나요? 선생님 의견 부탁드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
배열이 아니라 벡터를 이용해봤는데, 시간 제한 초과가 나는 이유가 궁금합니다.
안녕하세요 선생님. 선생님께서는 39번 문제 풀때 배열을 이용하셨지만 제가 먼저 풀어볼때는 벡터를 썼고 문제의 입출력예시는 알맞게 동작을 했었습니다. 그러나 채점폴더에서는 테스트케이스 5개 전부 시간초과가 났습니다. 제 코드는 아래와 같습니다. 어떤 부분이 잘못된 것이고 어떻게 고쳐야 할지 궁금합니다. 감사합니다. int main(int argc, char** argv){ // 배열의 크기 저장, 인덱스를 저장하는 변수 3개 (p) 셋 다 1로 시작함. int a_size, b_size, arr_size, i, p1=1, p2=1, p3=1; //freopen("input.txt", "rt", stdin); // 필요한 배열 3개 : 입력받는 배열 arr_a, arr_b, 결과배열 res // 입력받기 시작 scanf("%d", &a_size); vector<int> arr_a(a_size); for(i=1; i<=a_size; i++){ // 벡터에 숫자를 입력받는 인덱스를 1 부터 하고 있음. scanf("%d", &arr_a[i]); } scanf("%d", &b_size); vector<int> arr_b(b_size); for(i=1; i<=b_size; i++){ scanf("%d", &arr_b[i]); }// 입력받기 끝 // 결과 저장할 벡터 vector<int> res(a_size+b_size); // 인덱스 변수 2개를 가지고 작은 수가 나올 때 마다 p1 또는 p2를 이동시킴. while(p1 <= a_size && p2 <= b_size){ // 어느 한 쪽이 자기 크기보다 커질 때까지. if(arr_a[p1] < arr_b[p2]){ res[p3++] = arr_a[p1++]; // p3를 대입한 후에, 1증가 해준다. res[p3]; p3+=1; 과 같다. }else{ res[p3++] = arr_b[p2++]; } } // 한 쪽은 다 res에 들어가고, 다른 한 쪽은 res에 못들어가고 남았을 것. while(p1 <= a_size) res[p3++] = arr_a[p1++]; while(p2 <= b_size) res[p3++] = arr_b[p2++]; for(i=1; i<=a_size+b_size; i++){ // 출력 할 때도 인덱스 1부터 시작. printf("%d ", res[i]); } return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
38번
pos가 8일때 is[8]의 값 즉 0이 되어서 반복문 자체가 성립 안 되는 것 아닌가요. 1에서 시작해서 0보다 작을 때 까지 도는 것이 되어서요. 강의 잘 보고 있습니다. 감사합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
break문의 위치에 따른 출력 결과
안녕하세요 선생님. 제가 짠 코드에서 e를 만나면 while문을 break 하도록 하고 빠져나와 dis[e]를 출력하는데요, 이 break문의 위치에 따라서 출력결과가 달라지게 되는것에 대해 질문이 있습니다. for문 아래, 0~10000에 대한 continue문 아래에 break문이 있을때는 정답이 출력되지만, for문 전이나 push 이후에 break문이 있으면 5 14 입력시 11이 출력이 됩니다. 손으로 해보면 dis[14] = dis[9]+1로 3이 되는데, 왜 break문 위치에 따라 답이 달라지게 되는 걸까요? #include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; int ch[10001], dis[10001], dx[3] = { -1, 1, 5 }; int main() { int s, e, x; queue<int> q; //크기 안정해도 됨 대신 q.pop(). 크기 정하면 q->pop() cin >> s >> e; q.push(s); ch[s] = 1; while (!q.empty()) { x = q.front(); q.pop(); for (int i = 0; i < 3; i++) { //예외처리 if (x + dx[i] <= 0 || x + dx[i] > 10000) continue; if (ch[e] != 0) break; if (ch[x + dx[i]] == 0) { ch[x + dx[i]] = 1; dis[x + dx[i]] = dis[x] + 1; q.push(x + dx[i]); } } } cout << dis[e]; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
재귀 호출 질문 있습니다.
선생님 아래 재귀 호출에서요 printf("%d",x); 할때 return 있을 때와 없을 스택에 저장 되는 차이가 있는가요? void D(int x){ if(x==0) return; else { D(x-1); return printf("%d",x); } }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
else문 내를 다르게했더니 출력이 이상합니다.
path[L] = +a[L]; s += a[L]; DFS(L + 1, s); path[L] -= a[L]; s -= a[L]; DFS(L + 1, s); path[L] = 0; DFS(L+1, s); dfs함수의 else문 내를 이렇게 s를 따로 계산하고 s를 넘겨주니, 2460이 두번 출력됩니다. 선생님 코드와의 차이는 s-a[L]을 넘겨줬느냐 계산후 넘겨줬느냐 인데 어떤 차이 때문인가요?
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
46번 배열 관련 질문입니다!
삭제된 글입니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문있습니다.
선생님, 강의 잘 보고 있습니다. 다시 한번 제가 풀었던 문제들을 복습하고 있는데 그때 잘 풀렸던 문제 중에 이 문제가 다시 풀리지 않네요ㅠㅠ 고민을 그래도 꽤 했는데 이상하네여ㅛ..ㅜㅜ #include<stdio.h> #include<stdlib.h> int main() { int N; int index = 0; scanf("%d", &N); int* input = (int*)malloc(sizeof(int) * N); for (int i = 0; i < N; i++) { scanf("%d", &input[i]); } while (1) { int max = 0; int count = 0; if (index == N) { printf("%d ", count); break; } //무한루프가 종료되는 시점 while (input[index] <= input[index + 1]) { count++; index++; //이 동안에는 계속하여 count와 index가 증가하는 구간. } if (max < count) { max = count; } //while문을 빠져나온 시점의 count를 일단 max에다 가져다 놓는다. count = 0; //이 while문을 빠져나오는 순간 count를 초기화하고 다시 시작한다. index++; //다시 집계를 하기 위해 index를 한칸 뒤로 보낸다. } } 한번 제 코드에 어떤 문제가 있는지 봐주시면 감사하겠습니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
75번 구조체 연산자 질문입니다.
안녕하세요,언제나 좋은 강의 잘 듣고 있습니다^^ 구조체 연산자가 조금 헷갈려서 질문을 드립니다. vector형 자료구조를 sort할때 3번째 인자로 비교함수를 추가해주면 그에 맞게 정렬이 되는데 3번째 인자를 비워두고 구조체를 element로 하는 vector형 자료구조를 sort에 넣었을때 구조체 안에 연산자 오버로딩 함수가 미리 선언되어 있으면 sort함수에서 이것을 자동으로 인지하고 이에 맞게 정렬하는거 같은데 제가 이해한것이 맞는지 궁금합니다. 또 bool operator<(Data &b)와 bool operator>(Data &b)의 차이가 있을까요. sort함수가 "<"형 operator만 인식하는지 ... "<"로 쓰신 이유가 궁금합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
7번
String num = "bE au T I fu L"; for(int i =0; i <num.length(); i ++) { if(num.charAt(i)>=65 && num.charAt(i)<=90) { System.out.print(num.charAt(i)+32); } else if(num.charAt(i)>=97 && num.charAt(i)<=122){ System.out.print(num.charAt(i)); } } System.out.print(num.charAt(i)+32); 자바로 풀고 있는데 이 부분이 32 더 해도 숫자로 나오는데 문자로 바꿀려면 어떻게 해야 할까요; 캐릭터 형에 인트를 더해서 인트형이 된건지 캐릭터인건지 어떤 에이피아이를 사용해야 하는 건지 검색해 봐도 잘 모르겠습니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
문제점을 모르겠습니다.
#include<iostream> #include <fstream> #include<string> #include<cstdlib> #include<vector> #include<cmath> #include <algorithm> #include <cctype> #include <cstring> #include<stack> #include<queue> #include <utility> #define INF 214700000 using namespace std; int n, m; int ch[51]; int res= 9999,sum=0,dis; vector <pair<int, int>> p; vector <pair<int, int>> h; void DFS(int s, int L) { if (L == m) { for (int i = 0;i < m;i++) { cout << ch[i] << " "; } cout << endl; sum = 0; for (int i = 0;i<m;i++) { int x1 = p[ch[i]].first; int y1 = p[ch[i]].second; dis = 9999; for (int j = 0;j < h.size();j++) { int x2 = h[j].first; int y2 = h[j].second; int d = abs(x2 - x1) + abs(y2 - y1); dis = min(dis,d); } sum += dis; } if (sum <res) res = sum; } else { for (int i = s;i < p.size();i++) { ch[L] = i; DFS(i + 1, L + 1); } } } int main() { ios_base::sync_with_stdio(false); //ifstream cin; ///cin.open("input.txt"); //if (cin.is_open()) { cin >> n >> m; int a; for(int i=1;i<=n;i++){ for (int j = 1;j <= n;j++) { cin >> a; if (a == 2) { p.push_back({ i,j }); } else if (a == 1) { h.push_back({ i,j }); } } } DFS(0, 0); cout <<res; //} } 제가 선생님하고 다르게 짠부분은 i에 pizza값을 넣고 j에 house를 넣었는데 이 부분이 틀린거 같은데 틀린이유를 모르겠습니다...
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
컴파일은 되는데 결과값이 달라요
저는 결과값이 왜 이렇게 나올까요? 맥에서 xcode사용하는데 이거 때문일까요? #include <stdio.h> using namespace std; int main() { freopen("input.txt","rt",stdin); char a[101], b[101];//배열 a는 에러난거 담을 곳, 배열 b는 고친거 담을 곳 int i, p=0;//p는 옮겨 닮을 변수 gets(a); fgets(a,101,stdin); for(i=0;a[i]!='\0';i++){ if(a[i]!=' '){ if(a[i]>=65 && a[i]<=90){//대문자일 경우 소문자로 바꾸기 위해 32더해줌 b[p++]=a[i]+32; } else b[p++]=a[i]; } } b[p]='\0'; printf("%s", b); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
크루스칼,프림,다익스트라 벨만포드에 관해서
안녕하세요 선생님 4가지 강의를 모두 듣고 궁금한점이있어서 질문드립니다 4가지 알고리즘 모두 최소비용 관련된 문제로 이루어져 있는데 벨만포드같은경우에는 음의경우에도 쓸 수 있다는 차이점이 있지만 나머지 3문제는 어떤차이점있고 어떤경우에 쓰는건지 구체적으로 알고싶어 질문을 올립니다. 3가지 문제의 어떤차이점을 중점적으로 알고 공부를 하면좋을지 질문드립니다 감사합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문있습니다!
열심히 코딩 테스트 공부중인 1년차 개발자입니다. 요즘 공부하면서 고민이 문제 42번까지는 어느정도 혼자서 미 리 풀어보고 채점도 받고 강의를 들었는데요. 42번 이후 문제는 미리 문제를 풀어보려고 해도 문제가 이해가 잘안되거나.. 혹은 코드로 풀이가 잘 안되는거 같습니다. 물론 시간을 들여서 고민 하는게 도움이 된다고 하지만 이런 경우에는 어떻게 해야할까 요? 30분정도 고민해보다가 영상을 듣는게 나을까요?
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
10으로 나눠지는 갯수를 세는 코드로 짜보았습니다. 예제를 돌리면 틀린 경우가 발생하는데 어느 부분일까요?
int main() { int N, a, b, tmp, cnt = 0; cin >> N; vector<int> fac(N); for (int i = 0; i < N; i++) { fac[i] = N - i; } int i = 0; while(1) { if (i<N) { a = fac[i]; b = fac[i + 1]; tmp = (b * a); while (tmp % 10 == 0) { cnt++; tmp = tmp / 10; } i = i + 2; } else break; } cout << cnt; return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
이후 학습방향
강의를 거의 다 들어갑니다. 덕분에 손도 못대던 프로그래머스 문제들을 풀 수 있게 됐습니다. 이후 학습방향에 대하여 질문 드립니다. 모든 문제를 다시 복습하는 것이 나을까요? 아니면 바로 선생님께서 주신 문제리스트를 풀어보는 것이 나을까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
15번
for(int i =2; i <= num; i++) { for(int j = 2; j <= i; j++) { 이런 식에서 제이 부분을 왜 i를 루트로 계산하는지 잘 모르겠습니다. 계산할 양이 반으로 줄어 드는 것이랑 루트로 계산하는 것이랑 무슨 관계인지요...
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
35번 질문
아래 방법은 별로일까요? 버블 정렬은 O(N^2)이고 아래 방법은 비록 공간 복잡도는 효율적이지 못했지만 O(N)으로 처리하여 더 효율적인거 아닌가? 라는 생각을 하였습니다. #include<stdio.h> #include<vector> using namespace std; int main() { int n, i, p = 0; scanf("%d", &n); vector<int> a(n); vector<int> b(n); for(i = 0; i < n; i++) scanf("%d", &a[i]); for(i = 0; i < n; i++) { if(a[i] < 0) b[p++] = a[i]; } for(i = 0; i < n; i++) { if(a[i] > 0) b[p++] = a[i]; } for(i = 0; i < n; i++) printf("%d ", b[i]); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
코딩테스트 대비 계획에 대한 조언부탁드립니다.
안녕하세요 강사님. 저는 지난 3월 중순부터 두달간 백준사이트에서 입출력과 DP, 총 36문제를 혼자서 풀어보다가 가이드가 필요할 것 같아 강의를 구매하게 되었습니다. 올해 하반기 코딩테스트를 준비하는 입장에서 2달정도를 완강 목표로 두고 그 후에 다시 혼자서 문제를 풀어보려고 했습니다. 혹시 이 강의는 몇주정도로 잡고 가야할지 조언해주실 수 있으신가요? 현재 직장을 다니고 있어 퇴근 후에 공부하고 있습니다. 또한, 백준사이트의 문제목록을 저도 받을 수 있을까요? 좋은 강의 감사합니다.