월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
12. 플로이드-와샬(그래프 최단거리) . 27:25초
저 코드 상태에서 경로 출력이 가능하다는데..어떻게 하는건가요??;;
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
다른 풀이 방식
측면과 정면을 입력받아 따로 front, right 배열에 할당하였습니다.2차원 배열의 정면을 시작으로(n)해서 맨 뒤쪽까지 할당받는 식으로 접근하여 측면의 값과 정면의 값을 서로 비교하면서 값을 할당하였습니다.#include <stdio.h> #include <vector> #include <algorithm> using namespace std; int main() { int n, i, j, pos = 0, sum = 0; scanf("%d", &n); vector<vector<int> >a(n + 1, vector<int> (n + 1, 0)); int front[n + 1] = {}; int right[n + 1] = {}; // front 입력 for(i = 1; i <= n; i++) { scanf("%d", &front[i]); } // right 입력 for(i = 1; i <= n; i++) { scanf("%d", &right[i]); } // 값 할당 for(i = n; i >= 1; i--) { pos++; for(j = 1; j <= n; j++) { if(right[pos] <= front[j]) { a[i][j] = right[pos]; } else if(front[j] == 0) { a[i][j] = 0; } else { a[i][j] = front[j]; } } } // 합 계산 for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { sum += a[i][j]; } } printf("%d", sum); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
크루스칼 vs 프림
안녕하세요강의를 듣다 문득 궁금한게 있어서 질문드립니다.최소스패닝트리를 구할때크루스칼, 프림이 있는걸로 알고있는데요..제가 듣기론 일반적으로 크루스칼이 프림보다 효율적이다 라는 얘기를 들었습니다.위 말이 맞을까요?특수한 경우에만 더 효율적인건지 궁금합니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
숫자 총개수 small 질문있습니다.
#define CRTSECURE_NO_DEPRECATE#include <iostream>#include <vector>int main(int argc, char** argv){ //freopen("input.txt", "rt", stdin); int N = 0; int sum = 0; int temp = 0; std::cin >> N; for (int i = 1;i<100; i++) { if (N % (int)pow(10, i) == N) { sum = (N - (int)pow(10, i - 1) + 1)*(i); for (int j = 1; j < i; j++) { sum += 9 (int)pow(10, j - 1) j; } break; } } std::cout << sum << std::endl; return 0;}for문으로 모두 카운팅하는 방식으로도 구현을 해보고 이렇게도 해보았는데 괜찮은 접근일까요? 말씀해주신대로 혼자 해보고 풀이보고 다시해보고를 반복하다 궁금해서 질문드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
C/C++강의라고 하는데요
안녕하세요!선생님 강의 잘 듣고 있습니다.다만, C/C++대비라해서 샀는데..이 강좌는 C++을 위주로 진행되는 것 같아요..ㅠㅠC언어 시험보는 사람은 어떻게 공부해야하는건지 알 수 있을까요...? C언어는 그냥 알고리즘 이해에 초점을 맞춰서 강의를 보면 될까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
알고리즘 공부 관련해서 질문드립니다!
안녕하세요! 이번에 처음으로 코딩테스트 공부하려고 김태원 강사님의 강의를 구입하게 되었습니다!여태까지 알고리즘 공부하면서 문제를 보고 30분까지는 이해를 하려고 하는데 도저히 생각이 나지 않는 경우는 강의를 통해서 문제만 이해하고 구현은 스스로 하고있습니다.저의 문제는 구현하는 부분에서는 어느 정도 괜찮다고 생각하는데 문제에 대한 이해와 알고리즘을 도출하는 과정에서 굉장히 어렵게 느껴지는 것입니다. (문제를 이해하고 구현하는 것 까지 이루어지지 않으면 온전히 제가 푼게 아니라는 강박때문에..?)현재는 이러한 문제는 따로 체크하고 바로 넘어가고 해당 파트가 끝나면 체크한 문제를 바탕으로 복습하려고 합니다. 문제를 풀면 풀수록 난이도가 올라가는 것을 체감하면서 뭔가 제가 하고있는 방식이 맞는건지 의심되서 질문드립니다.ㅠㅠ
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
x도 같고 y도 같고 z도 같다면 어떻게 되나요?
안녕하세요 선생님.이 부분에서 만약에 비교 대상이x도 같고 y도 같고 z도 같아서저 3가지 if에 대해 모두 false일때는위 코드가 어떻게 동작하나요....?실행할 코드가 없어보이는데...
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
복합산술연산자 관련 질문입니다.
res = res * 10 + rem;부분에서 아래와 같이 코드를 작성하면 값이 안나오는데 복합산술연사자를 사용했는데 연산이 안되서 질문드렸습니다!res *= 10 + rem;
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
카운트 배열 선언
위처럼 int배열을 main 안에다가 선언을 하니 제일 마지막 문제는 틀렸다고 나오는데 이유가 궁금합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
55번 문제 답은 맞게 나오는데 exit_code_-1073741819 가 뜨네요
이유가 뭔지 알수 있나요? 테스트 시 exit_code_-1073741819 라고 뜨면 오답인건가요 아니면 정답이라고 보면 되는건가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
65번 미로탐색 질문있습니다!
#include<iostream> #include<algorithm> #include<vector> using namespace std; #define size 8 int cnt = 0; int dx[4] = { 0,1,0,-1 };//12시 3시 6시 9시 방향 순 int dy[4] = { 1,0,-1,0 }; int dfs(int mtrx[][size], vector<vector<int> > visit, int x, int y) { int xx, yy; if (x==size-1&&y==size-1) { cnt++; } else { visit[x][y] = 1; for (int i = 0; i < 4; i++) { xx = x + dx[i];//x축으로 갈좌표 yy = y + dy[i];//y축으로 갈 좌표 if (xx < 1 || xx>7 || yy < 1 || yy>7)//행렬을 벗어나는 경우 continue; if (mtrx[xx][yy] == 0 && visit[xx][yy] != 1) { dfs(mtrx,visit,xx,yy); } } } return cnt; } int main() { int mtrx[size][size]; vector<vector<int> > visit(size,vector<int>(size, 0)); for (int i = 1; i < size; i++) { for (int j = 1; j < size; j++) { cin>>mtrx[i][j]; } } int count = dfs(mtrx,visit, 1, 1); cout << count; } 65번 미로탐색 질문있습니다! 저는 전역변수를 사용하는 것보다 함수의 인수로 전달하는게 더 익숙하여 함수의 인수로 visit 벡터 즉 방문한 길인지 아닌지 판별하는 2차원 벡터를 넘겨주었습니다. 이렇게 할 경우 정확한 답이 나옵니다. 그러나 인수로 메인문에서 선언된 배열 자체 int visit[][size], 를 넘기거나 int** visit 처럼 동적생성을해서 배열을 넘기면 답이 정상적으로 나오지 않습니다. 저는 벡터가 동적생성되었기 때문에 int** visit으로 넘기면 정상작으로 동작할 것으로 생각했으나 실제로 그렇지 않아 의문이 생기게되어 질문드립니다. 함수의 인수로 벡터와 배열을 넘길때와 동적생성한 배열을 넘길때의 차이를 알고 싶습니다!
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
64번에서 ch 배열 다시 0으로 초기화 하지 않는것에 관련하여 질문 있습니다!
#include<iostream>#include<algorithm>#include<vector> using namespace std; int cnt = 0; int dfs(int n,int start, vector<vector<int> > mtrx, vector<bool> visit)//visit벡터를 콜바이 밸류로 받아오기 떄문에 값이 변하지 않음{ if (start == n) { cnt++; } else { visit[start] = true; for (int i = 1; i <= n; i++) { if (mtrx[start][i] == 1 && visit[i] == false) { dfs(n, i, mtrx, visit);//이 함수를 빠져나왔을 경우 들어가기 직전의 visit 벡터를 갖고 있으므로 다시 방문하지 않았다는 표시를 해줄 필요없음 } } } return cnt;} int main(){ int n, m; int n1, n2; cin >> n >> m; vector<bool> visit(n+1, false);//방문했던 지점인지 체크하기위해서 vector<vector<int> > mtrx(n + 1, vector<int>(n + 1, 0));//n+1/n+1 크기의 행렬을 0으로 초기화 for (int j = 1; j <= m; j++) { cin >> n1 >> n2; mtrx[n1][n2] = 1;//인접행렬 생성 } int count = dfs(n, 1, mtrx,visit); cout << count;} .안녕하십니까 64번문제 ch[]를 초기화 하는 부분에 대한 제 생각이 맞는 생각인지 의문이 들어 질문을 남기게 되었습니다. 저는 ch배열을 전역변수로 설정하지 않고 visit 벡터로 생성하여 dfs 함수에 콜바이 밸류로 넘겨주었습니다 이 때 선생님의 코드에서는 visit벡터 즉 강의에서 ch배열을 다시 0으로 초기화 해주는 부분이 있는데 제 생각으로는 콜 바이 밸류기 때문에 dfs함수가 다시 호출될 때 visit 벡터값이 변경되어 적용되는 것이 아니므로 원래 함수로 복귀했을때는 기존은 visit 벡터를 갖고 실행된다고 생각하여 저는 방문한 정점을 다시 0으로 변경하지 않았습니다. 제 생각처럼 콜바이 밸류기 때문에 값이 변경되지 않으니 방문했던 정점을 초기화 할 필요가 없는게 맞는지 아니면 다른이유인지 궁금합니다! 정답은 모두 맞게 나옵니다!!
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문있습니다
DFS 함수에서 if ( L == n+1) { } 안에 cnt 조건문을 끝내고 그 다음 줄에 따로 return;을 안적어도 문제없이 리턴되는데 더이상 실행할 문장이 남아있지 않기에 자동으로 리턴되어 돌아가는 건가요??
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
90점이 나옵니다!!! (51번)
선생님의 DP 방법을 듣고서 제 스스로 코드를 짜봤는데 이게 자꾸 Input 2에서 오류가 나는데 이유를 모르곘습니다....! 테스트시 input 2를 넣었을때) 나와야 하는 값 => 1231 제 값 => 1208 저 같은 경우에는 선생님처럼 반복문 하나에다 오렌지 값들의 합을 넣지 않았고, 따로 dy 배열을 만들지 않고 그냥 맨 처음에 input으로 받은 배열에다가 채웠습니다! 맨위 가로와 맨왼쪽 세로만 세우고 나서 그 다음에 나머지 부분에 오렌지 값의 합을 넣도록했습니다! 문제에 나온 예시로는 오렌지 값이 정답과 같이 들어갑니다 input2만 다르게 나와요! ㅜㅜ 이유를 모르겠습니다!! 도와주세요 ..... #include <iostream> using namespace std; int main() { int H,W; int max = -2147000000; int arr[701][701]; int myH, myW; // input scanf("%d %d", &H, &W); for(int i=0; i<H; i++){ for(int j=0; j<W; j++) scanf ("%d", &arr[i][j]); } scanf("%d %d", &myH, &myW); // orange // 각 '칸까지의 사각형'의 합으로 채우기 // [1] 테두리 채우기 for(int i=1; i<H; i++){ // 왼 세로 arr[i][0] = arr[i-1][0] + arr[i][0]; } for(int j=1; j<W; j++){ // 위 가로 arr[0][j] = arr[0][j-1] + arr[0][j]; } // [2] 나머지 칸 채우기 for(int i=1; i < H; i++){ for(int j=1; j < W; j++){ arr[i][j] += arr[i-1][j] + arr[i][j-1] - arr[i-1][j-1]; } } for(int i=0; i < H; i++){ for(int j=0; j < W; j++){ printf("%d ", arr[i][j]); } printf("\n"); } // [3] 최대의 오렌지 갯수 구하기 for(int i=myH; i<H; i++){ int cnt = 0; for(int j=myW; j<W; j++){ cnt = arr[i][j] - arr[i][j-myW] - arr[i-myH][j] + arr[i-myH][j-myW]; if(max < cnt) max = cnt; } } // output printf("%d", max); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
문제풀이 질문
현재 문제를 어느정도 생각하다 보면 풀리는 문제가 많으나 가끔 1~2시간을 생각해도 비교적 깔끔한 코드로 구현이 안될 것 같다는 생각이 드는 문제들이 종종 있습니다 그럴 경우 문제 해설(코드 작성 제외)하시는 부분을 잠깐 보고 다시 코드를 작성해보고 해결되면 코드 작성 풀이까지 확인하는데 이런 방법으로 풀면 도움이 안되는지 싶어서 질문드립니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
min max값 -2147000000, 2147000000의 이유
안녕하세요 선생님 (signed) int 4 byte -2,147,483,648 ~ 2,147,483,647 signed int의 경우 값 범위가 위와 같은데 왜 최대 값과 최소 값을 구할때 -2,147,483,648 와 2,147,483,647 이 아닌 -2147000000 과 2147000000 으로 잡나요?? 너무 궁금합니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
재귀함수 복귀주소
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 호출되는 라인9의 재귀 함수의 복귀주소가 전부다 같은건가요? 그러니까 함수가 호출되거나 할때마다 고정된 영역이라 호출주소는 전부다 같은건지 아니면 함수가 호출될때마다 복귀하는 주소는 서로 유일하게 저장되어 저장 위치가 달라져 서로 복귀주소는 다른 주소값을 갖게되는지 궁금합니다 명령코드로서 읽고가는거라면 복귀주소가 같을거같은데.. 함수가 생성될때마다 서로 복귀주소를 구분되게 해서 저장하는건지 모르겠네요
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
예외처리를 안해도 괜찮은가요?
PDF 문제에는 3<=M<N<=1000 이러한 조건이 있는데 이부분에 대한 예외처리를 따로 해주지않아도 괜찮은가요? 채점의 결과와 상관없이 기업 코딩테스트에서 이러한 부분도 신경쓰지않을까 싶어 질문드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
채점시 5문제 모두 Time_Limit_Exceeded가 발생합니다
선생님과 유사하게 코드를 작성하였는데 체점시 5문제 모두 Time_Limit_Exceeded가 발생합니다 어디가 문제가 있을까요? int main(){ //freopen("input.txt", "rt", stdin); int a[10], b[10], a_num = 0, b_num = 0, a_win = 0, i; for(i=0; i<10; i++) scanf("%d ", &a[i]); for(i=0; i<10; i++) scanf("%d ", &b[i]); for(i=0; i<10; i++) { if(a[i] > b[i]) { a_num += 3; a_win = 1; } else if(a[i] < b[i]) { b_num += 3; a_win = 2; } else { a_num++; b_num++; } } printf("%d %d\n", a_num, b_num); if(a_num > b_num) { printf("A\n"); } else if(a_num < b_num) { printf("B\n"); } else { if(a_win == 1) printf("A\n"); else if(a_win == 2) printf("B\n"); else printf("D\n"); } return 0;}
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
저의 풀이 방식에 대한 질문
#include<iostream>#include<stdio.h>#include<vector>#include<algorithm> using namespace std;/* 알고리즘 (point: 1~n까지 순서대로 값을 찾아주기 때문에, 자기보다 큰 값을 고려할 필요가 없음) 1)필요한 변수 - 사용자의 입력을 받을 크기 n의 배열(inversion sequence 담김) -> num 배열 - inversion sequence를 토대로 1~n까지 수를 넣어줄 배열 -> a배열 2)cnt를 -1부터 시작해서, 0의 개수를 세준다. -> 개수와 inversion sequence의 값이 같아질 경우, 그 자리부터 끝 자리중 제일 처음 비어있는 공간에 삽입해준다.*/ int main() { int n, cnt, pos, input = 1, k; //pos : cnt값과 0의 개수가 동일해 질 때 위치를 가리키는 함수 scanf("%d", &n); vector<int> a(n); vector<int> num(n); for(int i = 0; i<n; i++){ scanf("%d", &num[i]); } for(int i = 0; i<n; i++){ pos = num[i]; //1~n의 위치를 나타내는 num값을 pos로 지정해주고 cnt = -1; //cnt를 -1부터 시작함 for(int j = 0; j<n; j++){ if(a[j] == 0) //0일 경우(비어있을 경우) cnt 증가 cnt++; if(cnt == pos){ //cnt가 pos와 같아질 경우, for(k = j; k<n; k++){ //그 자리에 이미 값이 있을 수도 있기 때문에 끝까지 검사해서 if(a[k] == 0){ //가장 앞에 있는 0에 input값(1~n)을 삽입해줌 a[k] = input; input++; break; //반복문 나오고 } } if(a[k] != 0) break; //값을 넣어주었으면 반복문을 빠져나와 다음 input값을 넣어주어야 함 } } } for(int i = 0; i<n; i++){ printf("%d ", a[i]); } return 0; } 안녕하세요, 수업 정말 잘 듣고 있습니다. 저는 작은 수부터 차례대로 처리하였는데, 0의 개수를 세는 방식으로 처리하였습니다. 선생님의 방식과 너무 다른 풀이라 이런식으로 생각하는 방식이 괜찮은 것인지 여쭤보고 싶습니다. 감사합니다 !!