월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
60. 합이 같은 부분집합
안녕하세요, 선생님! 선생님과 코드가 약간 다른데, 제가 만드는 test case에선 정상적으로 작동하는 것 같지만 선생님의 채점파일에선 1,3에서 Wrong Answer이 나옵니다.. 혹시 어느 부분에서 잘못되었는지 봐주실 수 있으실까요? #include <iostream> using namespace std; int input[10], ch[11] = {0, }; int n, sum1 = 0, sum2 = 0; bool bReturn = false; void DFS(int x); int main() { int k; cin >> n; for(int i = 0; i < n; i++) { cin >> k; input[i] = k; } ch[input[0]] = 1; DFS(0); if (bReturn == true) { cout << "YES"; } else cout <<"NO"; return 0; } void DFS(int x) { if(x > n) { sum1 = 0; sum2 = 0; for(int i = 1; i <= 10; i++) { if(ch[i] == 1) sum1 += i; else if(ch[i] == 2) sum2 += i; } if(sum1 == sum2) { bReturn = true; return; } } else { // Move to right ch[input[x+1]] = 1; DFS(x+1); // Move to left ch[input[x+1]] = 2; DFS(x+1); } }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
55. 기차 운행
안녕하세요 55. 기차 운행(스택) 문제를 좀 다르게 풀었는데 마지막 예시가 자꾸 틀려요. 도와주세요ㅜ stack[top]보다 큰 수가 push 되면 스택 구조니까 순서가 맞을 수 없다고 생각하면서 풀었어요 배열 a: input 배열 result : 출력할 결과 배열 b : 스택에서 꺼낸 숫자 저장 i=1 ; i<n ; i++ {a[i]와 stack[top]을 비교해서 - 1)a[i] > stack[top] 스택이 비워질 때까지 or a[i]<stack[top] 일 때까지 pop { pop한 숫자를 배열 b에저장 (방금 저장한) pop한 숫자와 배열 b에 이전에 넣은 수를 빼서 차가 1이 아니면 impossible + 종료 result[++]='O' } push(a[i]) , result[++]='P' i++ -2) a[i] < stack[top] push(a[i]) , result[++]='P' i++ } 스택이 empty 될 때까지 { pop한 숫자를 배열 b에저장 (방금 저장한) pop한 숫자와 배열 b에 이전에 넣은 수를 빼서 차가 1이 아니면 impossible + 종료 result[++]='O' } 결과 출력 이렇게 했어요 코드는 c로 풀었습니다 #pragma warning (disable :4996) #define M 60 #include<stdio.h> int top = -1; int stack[M] = { 0 }; int b[30] = { 0 }; void push(int n) { stack[++top] = n; } int pop() { return stack[top--]; } int main(void) { int n=0; int a[30] = { 0 }; char result[M] = { 'P' }; int r = 0, B = 0; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); push(a[0]); for (int i = 1; i < n; i++) { if (a[i] > stack[top]) { while (top > -1&&a[i]>stack[top]) { b[B]=pop(); result[++r] = 'O'; if (B > 0 && (b[B] - b[B - 1] != 1)) { printf("impossible"); return 0; } ++B; } push(a[i]); result[++r] = 'P'; } else { push(a[i]); result[++r] = 'P'; } } while (top > -1) { b[B] = pop(); result[++r] = 'O'; if (b[B] - b[B - 1] != 1) { printf("impossible"); return 0; } B++; } for (int j = 0; j <=r; j++) printf("%c", result[j]); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
재귀함수에서 pass by reference
#include <iostream> using namespace std; void recursion(int& n); int main() { int n; cin >> n; recursion(n); return 0; } void recursion(int& n) { if(n==0) return; else { recursion(n-1); cout << n << " "; } } 안녕하세요! 56번 재귀함수 분석에서 이렇게 코드를 짰는데 recursion(n-1); 부분에서 다음과 같이 에러가 나왔습니다! invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'. pass by reference로 값을 받으면 안되나요..? 왜 이런 에러가 나왔는지 잘 모르겠습니다..ㅠㅠ
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문있습니다..!
이 코드는 왜 틀린지 궁금합니다 a=ch[i]-ch[i+1]값의 절댓값 tmp=ch배열에 있는 입력값의 서로 인접해 있는 두 수의 차의 합 sum=결과가 yse일지 no일지의 기준 으로 잡고 문제를 풀었습니다 #include <stdio.h> int main() { int n,i,tmp=0,sum=0,cnt=0,a,ch[101]; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&ch); } for(i=0;i<n-1;i++){ if(ch[i]-ch[i+1]>0) a=ch[i]-ch[i+1]; else if(ch[i]-ch[i+1]<0) a=-(ch[i]-ch[i+1]); tmp=tmp+a; for(i=0;i<n;i++){ cnt++; sum=sum+cnt; } if(tmp==sum) printf("yes"); else printf("no"); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
연속된 0의 숫자
삭제된 글입니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문있습니다!
이 부분에서 질문있습니다 for(i=2;i<=n;i++){ scanf("%d",&now); if(now>=pre) { cnt++; if(cnt>max) max=cnt; } else cnt=1; pre=now;} 에서 pre가 now가 돼야지 밀고갈 수 있다고 하셨는데 현재 입력값인 now가 pre값으로 돼야지 다음 입력값 now가 이전 입력값인 now 즉 pre값과 비교되는거 아닌가요? 그럼 pre=now가 아닌 now=pre값이 되는거라고 생각되는데 제 생각이 뭐가 틀렸는지 모르겠습니다..
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
선생님과 비슷한 코드인데 출력값이 다릅니다
#include <stdio.h> int main() { int a[10],b[10]; int i,acnt=0,bcnt=0,lw=0; for(i=0;i<=9;i++){ scanf("%d",&a[i]);} for(i=0;i<=9;i++){ scanf("%d",&b[i]);} for(i=0;i<=9;i++){ if(a[i]==b[i]){ acnt=acnt+1; bcnt=bcnt+1;} else if(a[i]>b[i]){ acnt=acnt+3; lw=1;} else{ acnt=bcnt+3; lw=2;}} printf("%d %d\n",acnt,bcnt); if(acnt==bcnt){ if(lw==1) printf("A"); else if(lw==2) printf("B"); else printf("D");} else if(acnt>bcnt) printf("A"); else printf("B"); return 0; } 로 했을땐 선생님이 하신 결과값과 다르게 나오는데 왜 그런지 모르겠습니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
기본적인 질문입니다ㅠ!
소스코드에서 문자 배열 a에 입력 받을 때 a자체가 주소라고 배웠는데 왜 &을 써주나요?? 궁금합니다ㅠㅠ
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
궁금한게 있습니다!
코드중 마지막 부분에서 for(i=1; i<=52; i++){ if(a[i]==b[i]){ printf("YES\n"); exit(0); } } printf("NO\n"); return 0; } 이런식으로 변경하면 안되는 이유가 무엇인지 궁금합니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
선생님, 안녕하세요? 48번 질문이 있습니다.
선생님, 저도 코드는 비슷하게 짠 것 같은데 숫자가 소실되어서 자꾸 가장 가까운 값을 못찾는 경우가 생기는 것 같습니다. 해당 부분 주석처리를 해두긴 했습니다. 가령 입력 예제 맨 마지막 평균 49 에서 50이 나와야 하는데 그에 대한 분기를 따로 나누지는 않았습니다만 49와 48과의 차이는 0, 49와 50과의 차이는 1이 나와서최종적으로 50이 나와야할 것이 48이 나오게 되는 결과가 나오게 됩니다...이 코드에서 대체 무엇이 잘못된 것일까요?ㅜㅜㅜㅜ #include<stdio.h> #include<stdlib.h> #include<algorithm> #include<vector> #include<math.h> using namespace std; int main() { //격자판 생성 int map[9][9]; double sum[9] = { 0, }; int min[9] = { 0, }; //테스트용 격자판 생성 int test_map[9][9] = { {3,23,85,34,17,74,25,52,65} ,{10,7,39,42,88,52,14,72,63} ,{87,42,18,78,53,45,18,84,53} ,{34,28,64,85,12,16,75,36,55} ,{21,77,45,35,28,75,90,76,1} ,{25,87,65,15,28,11,37,28,74} ,{65,27,75,41,7,89,78,64,39} ,{47,47,70,45,23,65,3,41,44} ,{87,13,82,38,50,12,48,29,80} }; /*int test_map[9][9]; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { scanf("%d", &test_map[i][j]); } }*/ //모두 정렬을 합니다. for (int i = 0; i < 9; i++) { for (int j = 0; j <= 9; j++) { sort(test_map[i], test_map[i] + j); } } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { printf("%d ", test_map[i][j]); } printf("\n"); } printf("\n"); for (int i = 0; i < 9; i++) { int totalindex = 0; for (int j = 0; j < 9; j++) { sum[i] += *(test_map[i] + j); } sum[i] = (double)sum[i] / 9; int index = 4; int min_check[9] = { 0, }; int min_ans[9] = { 0, }; for (int k = 0; k < 9; k++) { min_check[k] = abs(sum[i] - *(test_map[i] + k)); } //for (int p = 0; p < 7; p++) { printf(" (%d %d) ",*(test_map[i]+p), min_check[p]); } //이 부분에서 숫자가 소실되는 현상이 발생합니다!ㅜㅜㅜㅜ printf("\n"); int min = 1000; for (int q = 0; q < 9; q++) { int index = 0; if (min > min_check[q]) { min = min_check[q]; totalindex = q; } } printf("%.0f %d \n",sum[i],*(test_map[i]+totalindex)); printf("\n"); } printf("\n"); }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문이 있습니다.
안녕하세요 선생님. 질문이 있습니다. Q1. 10억까지도 int형으로 표현할 수 있기 때문에, 저는 for문을 돌면서 if(i>=1 && i<=9) sum += 1; else if(i>=10 && i<=99) sum +=2; ... else if(i>=10000000 && i<=99999999) sum += 8; else if(i == 1000000000) sum += 9; 이런식으로 코드를 구현하였습니다. 그리고 선생님의 설명을 듣고, 코드를 이런식으로 수정하였습니다. if(N>=1 && N<=9) { sum += N; } else if(N>=10 && N<=99) { sum += 9*1; sum += (N-9)*2; } else if(N>=100 && N<=999) { sum += 9*1; sum += 90*2; sum += (N-99)*3; } else if(N>=1000 && N<=9999) { sum += 9*1; sum += 90*2; sum += 900*3; sum += (N-999)*4; } else if(N>=10000 && N<=99999) { sum += 9*1; sum += 90*2; sum += 900*3; sum += 9000*4; sum += (N-9999)*5; } else if(N>=100000 && N<=999999) { sum += 9*1; sum += 90*2; sum += 900*3; sum += 9000*4; sum += 90000*5; sum += (N-99999)*6; } else if(N>=1000000 && N<=9999999) { sum += 9*1; sum += 90*2; sum += 900*3; sum += 9000*4; sum += 90000*5; sum += 900000*6; sum += (N-999999)*7; } else if(N>=10000000 && N<=99999999) { sum += 9*1; sum += 90*2; sum += 900*3; sum += 9000*4; sum += 90000*5; sum += 900000*6; sum += 9000000*7; sum += (N-9999999)*8; } else if(N == 100000000) { sum += 9*1; sum += 90*2; sum += 900*3; sum += 9000*4; sum += 90000*5; sum += 900000*6; sum += 9000000*7; sum += 90000000*8; sum += 9; } 수정하고 나니, loop을 돌지 않아 시간 복잡도 측면에서 더 효율적이라고 생각이 들었습니다. 그런데 추가적으로 여쭤보고 싶은것은, 입력할 수 있는 수의 범위가 10억이 아니라, int형으로 표현할 수 없는 범위라면 위의 방식을 그래도 사용하되, long long 자료형을 사용하여 정수를 표현하거나 or 아예 새로운 방식으로 구현을 해야되는거겠죠?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
vector<int> a(n+1)에 관하여
안녕하세요 선생님. vector 선언할때 vector<int> a(n+1)이라고 하면 n+1 사이즈만큼 0으로 초기화한다는 뜻인것 같은데 혹시 이문제에서 이렇게 선언한 이유를 알 수 있을까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
괄호 질문 있습니다.
#include <stdio.h> int main() { freopen("input.txt", "rt", stdin); int n, i, pre, now, cnt, max; scanf("%d", &n); scanf("%d", &pre); //메커니즘은 pre와 now를 비교하여 cnt를 증가시키는 방법이다. 따라서 배열의 맨처음의 원소값이 있어야 비교가능. cnt=1; max=1; for(i=2; i<=n; i++){ scanf("%d", &now); if(now>=pre){ cnt++; if(cnt>max){ max = cnt; } }else{ cnt=1; pre=now; } } printf("%d\n", max); return 0; } 단지 else부분에 괄호만 쳤는데 답이 7이 나오는게 이해가 되질 않습니다. 왜 그럴까요? ㅠㅠ
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
궁금한게 있습니다.
저는 else if의 조건을 원소의 차이로 계산한 값으로 적었는데 이렇게 적으면 안될까요? #include <stdio.h> int main() { freopen("input.txt","rt",stdin); int n, a[101], b[101],k,i; scanf("%d", &n); for(i=1; i<=n ;i++) //배열 A에 A에 관한 정보 저장 { scanf("%d", &a[i]); } for(i=1; i<=n ;i++) //배열 B에 B에 관한 정보 저장 { scanf("%d", &b[i]); } for(k=1; k<=n; k++){ if((a[i]-b[i])==1) { printf("A\n"); } else if((a[i]-b[i])==2) { printf("BWn"); } else if((a[i]-b[i])==-1) { printf("B\n"); } else if((a[i]-b[i])==0) { printf("D\n"); } else { printf("A\n"); } } return 0; } 이런식으로 두 배열의 같은 인덱스 값의 원소를 빼서 그 값으로출력하게끔 하려고 했는데 코드를 잘못 적어서 그런걸까요? 아님 제가 다른 조건을 생각하지 못해서 그런걸까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
안녕하세요 채점이요
채점 프로그램 실행이 안돼요 window가 알 수 없는 프로그램이라고 차단을 해요 추가정보도 아예 클릭이 안되는데 사용할 수 없는건가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
안녕하세요 선생님, 44번 질문을 드리고 싶습니다.
제 코드에 어느 부분이 문제가 있는지 궁금합니다. 선생님과 얼추 비슷한 생각을 한 것 같은데 말의 마리 수가 많아지는 경우(C!=2)에 혹시 제가 간과한 부분이 없는지 중점을 두시면서 가르침을 주시면 좋을 것 같습니다. 미리 새해 복 많이 받으세요 선생님^^ #include<stdio.h> #include<stdlib.h> #include<vector> #define _CRT_SECURE_NO_WARNINGS #include<algorithm> #include<iostream> using namespace std; int main() { int N; //마굿간 숫자 int C; // 말 마리 수 int input[200001] = { 0, }; scanf("%d %d", &N, &C); //C만큼 배열 위에 1을 표하게 될 것 int magutgan[20001] = { 0, }; int start = 0; int end = 0; //input안에 1,2,8,4,9 //최대가 되도록 하면 되는 거니까 //가장 작을 때 위치와 가장 클 때 위치를 일단 정한다. for (int i = 0; i < N; i++) { scanf("%d", &input[i]); } for (int i = 0; i < 201; i++) { if (input[i] != 0) { magutgan[input[i]]++; } } printf("\n"); for (int i = 0; i < 201; i++) { if (magutgan[i] != 0) { start = i; break; } } for (int i = 201; i > 0; i--) { if (magutgan[i] != 0) { end = i; break; } } //start와 end를 각각 성공적으로 구하였다. //가장 가까운 두 말의 최대 거리 int distance=0; int maxdistance = 0; //양 끝만 주어지는 경우는 그 사이가 최대가 되도록 합니다. if (C == 2) { maxdistance = end - start; printf("%d", maxdistance); } else { sort(input, input + N); for (int i = 1; i < N - 1; i++) { if (input[i] - start > end - input[i]) { distance = input[i] - start; if (distance > maxdistance) { maxdistance = distance; } } if (input[i] - start <= end - input[i]) { distance = end - input[i]; if (distance > maxdistance) { maxdistance = distance; } } } } printf("\n"); printf("%d", maxdistance); }
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문드립니다
#include <stdio.h> int main(){ int n,i,cnt=0; scanf("%s",&n); for(i=1;i<=n;i++){ if(i>=1 && i<10) cnt++; else if(i>=10 && i<100) cnt=cnt+2; else if(i>=100 && i<1000) cnt=cnt+3; else if(i>=1000 && i<10000) cnt=cnt+4; else cnt=cnt+5; } printf("%d",cnt); return 0;} 이 코드를 사용하면 입력된 숫자값의 자리수를 카운팅해줘서 될꺼같은데 출력값이 다르게 나오네요 이유가 무엇인지 궁금합니다..
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
출력값이 항상 no로 나옵니다
#include <stdio.h> #include <string.h> int main() { char a[30]; int i,n,cnt=0; n=strlen(a); scanf("%s", &a); for(i=0;i<n;i++){ if(a[i]=='(') cnt++; else if(a[i]==')') cnt--; if(cnt<0) break; } if(cnt==0) printf("YES\n"); else printf("NO\n"); return 0; } 이렇게하면 왜 출력값이 항상 no로 나오는지 모르겠습니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
5번 문제 코드 질문
안녕하세요? 5번문제 강의 수강 및 코드 실행 중 런타임 에러 간혹 나타납니다. 확인해주시면 감사하겠습니다. 주민등록번호 뒷자리 2로 시작하는 부분에서 에러가 나는듯 합니다. #include <iostream> #include <string> using namespace std; int main(int argc, char** argv) { int age; char sex, idCopy[14]; string id; cin >> id; id.copy(idCopy, 14, 0); age = idCopy[7] - '0'; if(age%2==0) sex = 'W'; else sex = 'M'; if((idCopy[7]-'0')<3) age = 1900 + ((idCopy[0]-48) * 10) + (idCopy[1]-48); else age = 2000 + ((idCopy[0]-48) * 10) + (idCopy[1]-48); cout << 2019 - age + 1 << " " << sex; return 0; } 바쁘시겠지만 한번만 봐주시면 감사하겠습니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
심바문제 질문입니다.
안녕하세요 선생님.. 강의 잘 듣고 있습니다! 강의를 보고 선생님 코드를 돌려보았는데 이런 경우에 결과가 잘못 출력되는것 같아 질문드립니다. 맵 아래 이동/size/거리는 제가 임의로 출력을 해본것인데요.. 만약 맵이 위의 사진과 같다면 size가 3이 됐을때 (1,3)에 있는 크기 3토끼를 먹으러 갈 수 있게 되어서 답이 6이상이 나오지 않나요..? 코드 상에서는 6을 출력하고 끝나는데 코드에 오류가 있는걸까요..? 아니면 제가 뭘 잘못 생각하고 있는건가요?!