목록Algorithm/Cases-Study (76)
자이의 프로그래밍
입력을 받은뒤 0행에서의 해당 출발점의 값이 1이면 queue에 push한뒤 순차적으로 좌, 우, 아래 순서로 찾았다. ch 배열을 활용해 우측으로 방향을 진행하는 경우엔 다음 방향을 찾을 때 이미 방문한 곳을 방문하지 않게 해서 좌측에 방문한 곳을 탐색하지 않도록 했다. 도착점에 도착한 경우 가장 큰 시작점을 찾게 해주었다. #include #include #include #include #include using namespace std; int dx[]={0, 0, 1}; int dy[]={1, -1, 0}; int arr[110][110]; int ch[110][110]; int main(){ for(int T=0; T>tc; queue q; for(int i=0; iarr[i][j]; } } i..
배열을 일일이 검사해서 가장 많은 수는 ans에, 그 수의 값은 ansarr에 저장해서 구해주었다. #include #include using namespace std; int ch[1010]; int main(){ int tc; cin>>tc; for(int T=1; T>TC; memset(ch, 0, sizeof(ch)); for(int i=0; i>a; ch[a]++; } int ansarr=-1; int ans=-1; for(int i=0; i=ans){ ans=ch[i]; ansarr=i; } } cout
가로길이를 입력받고, 그 가로길이만큼을 배열에 입력받은 뒤 좌로 두칸, 우로 두칸을 검사하면서 좌 우의 빌딩들이 해당 빌딩보다 작은지 검사했다. (같거나 큰 경우 해당 열에서는 조망권이 확보되지 않는다.) 좌로 두칸, 우로 두칸의 빌딩들 중 가장 큰 값을 구해 해당 열의 빌딩에서 빼서 최종 값에 더해주었다. #include #include #include #include #include using namespace std; int a[1010]; int main(){ for(int T=1; T>n; for(int i=0; i>a[i]; } int sum=0; for(int i=2; i=i-2; j--){ if(a[j]maximum)maximum=a[j]; } else status=1; } for(int ..
입력을 받은 뒤 정렬하여 제일 앞에 작은 블록입력을 받은 뒤 정렬하여 제일 앞에 적은 상자의 갯수, 제일 뒤에 많은 상자의 갯수가 오게 하였다. 주어진 횟수만큼 큰 블록을 빼고 작은 블록을 더한 뒤 정렬하는 과정을 반복했고, 그 과정중에 정렬이 완료되었으면 반복문을 빠져나갔다. #include #include #include using namespace std; int main(){ vector v; for(int T=1; T>n; for(int i=0; i>a; v.push_back(a); } sort(v.begin(), v.end()); for(int i=0; iv[0]){ v[99]--; v[0]++; } else break; sort(v.begin(), v.end()); } cout
100*100의 배열을 입력받고 한 행, 한 열씩 계속 더해가면서 최댓값을 찾았다. 대각선의 경우엔 예외로 따로 처리해주었다. #include #include #include #include #include using namespace std; int arr[110][110]; int main(){ for(int T=1; T>tc; for(int i=0; iarr[i][j]; } } int maximum=-2147000000; for(int i=0; imaximum)maximum=colsum; } int sum=0; for(int i=0; imaximum)maximum=sum; sum=0; for(int i=0; imaximum)maximum=sum; cout
찾아야 할 문자열과 탐색해야 할 문자열을 입력받고 tmp라는 문자형 배열을 선언하여 해당 배열에 탐색해야 할 문자열을 순차적으로 대입해주었다. 이후 strcmp라는 함수를 이용하여 같다면 cnt를 하나씩 더해 최종 갯수를 구해주었다. #include #include #include #include #include using namespace std; char finding[1010]; char seek[1010]; int main(){ for(int T=1; T>tc; cin>>finding>>seek; int cnt=0; for(int i=0; i
a값을 입력받은 뒤 a값이 0이 아니면 b값도 입력받아야 하므로 b를 입력받았다. a가 0이면 현재의 속도를 유지하므로 최종 달린 길이에 현재의 속도만큼을 더해주었다. (1초이므로) a가 1이면 입력받은 속도만큼 가속한뒤 더해주었다. a가 2이면 현재 속도보다 감속해야 할 속도가 더 큰 경우 0으로 속도를 맞춰주었고 그렇지 않은 경우에는 현재 속도를 입력받은 속도만큼 감속해 더해주었다. #include #include #include #include #include using namespace std; int main(){ int test_case; cin>>test_case; // for(int T=1; T>n; int nowspeed=0; int len=0; for(int j=0; j>a; if(a!..
2로 나눠지는 한 2로 계속 나누고 3으로 나눠지는 한 3으로 계속 나누는 과정을 반복한 뒤에 각각을 출력했다. #include using namespace std; int main(int argc, char** argv) { int test_case; int T; cin>>T; for(test_case = 1; test_case >a; while(a%2==0){ a=a/2; twonum++; } while(a%3==0){ a=a/3; threenum++; } while(a%5==0){ a=a/5; fivenum++; } while(a%7==0){ a=a/7; sevennum++; } while(a%11==0){ a=a/11; elevennum++; } cout