목록분류 전체보기 (151)
자이의 프로그래밍
이상한 지문의 문제... 재귀적으로 모든 값을 체크하면서 수를 1~10까지밖에 모르므로 아래의 방식을 사용했다. #include #include using namespace std; int n; int sign[10][10]; int ans[10]; bool check(int index) { int sum = 0; for (int i=index; i>=0; i--) { sum += ans[i]; if (sign[i][index] == 0) { if (sum != 0) return false; } else if (sign[i][index] = 0) return false; } else if (sign[i][index] > 0) { if (sum n; string s; cin >..
이것도 마찬가지로 순열을 이용했다. 일단 입력을 받은 후 0인 팀과 1인 팀으로 절반씩 나눠서 벡터에 push해주었다. 그리고 정렬을 한 뒤, next_permutation으로 모든 경우를 찾으면서 start 팀과 link 팀의 점수를 구해주었다. 그리고 차잇값이 가장 적은 값으로 갱신해주었다. #include #include #include #include #include #include using namespace std; int s[25][25]; int main(){ int n; cin>>n; for(int i=0; is[i][j]; } } vector d; for(int i=0; i
순열을 사용해서 해결했다. 입력받는 수 만큼의 문자열에 대한 string vector를 선언한 뒤 입력받는 각각의 문자를 벡터에 삽입하고 정렬한 뒤 중복되는 것들을 제거했다. 그 벡터의 크기로 서로 다른 알파벳들의 갯수를 알 수 있었으며 최대값을 구하는 문자이기 때문에 예를들어 ABC+DEF인 경우 1이 사용되는 일은 최댓값을 구할 때 절대 없을 것이므로 9부터 서로 다른 알파벳들의 갯수만큼 정수형 벡터에 넣어주었다. 그러고 나서 정수형 벡터를 next_permutation 순열로 돌리면서 최댓값을 갱신해주었다. #include #include #include #include #include using namespace std; char alpha[256]; int calc(vector &a, vecto..
큐를 이용해서 풀었다. 일반적인 방법! #include #include #include using namespace std; vector v[20100]; int ch[20100]; int solution(int n, vector edge) { int answer = 0; for(int i=0; imaxi) maxi=ch[x]; for(int i=0; i
우선순위 큐를 사용해 비교적 간단하게? 해결했다! priority_queue를 선언한 뒤, 무한 반복문 내부에서 break 조건이 맞으면 빠져나가는 방식으로 진행했다. #include #include #include using namespace std; int solution(vector scoville, int K) { int answer = 0; priority_queue q; for(int i=0; i=K) break; else if(q.empty()){ answer=-1; break; } int min2=q.top(); q.pop(); q.push(min1+2*min2); answer++; } return answer; }
행, 열별로 올 수 있는 경로의 갯수를 갱신해주며 진행해줬습니다 #include #include #include #include #include #include using namespace std; int a[1010][1010]; long long ans[1010][1010]; int main(){ ios_base::sync_with_stdio(false); int n; cin>>n; for(int i=1; ia[i][j]; } } ans[1][1]=1; for(int i=1; i
모든 경우를 다 해보았다! x의 물통이 비었을 때만 z의 물통에 담겨있는 양을 답으로 체크해주었다 #include #include #include #include #include #include using namespace std; bool check[250][250]; bool ans[250]; int main(){ ios_base::sync_with_stdio(false); int a, b, c; cin>>a>>b>>c; int sum=c; queue q; q.push(make_pair(0, 0)); check[0][0]=1; ans[c]=1; while(!q.empty()){ int x=q.front().first; int y=q.front().second; int z=sum-x-y; q.pop()..
큰 수와 작은 수를 구할때 0에서부터 n+1개를 1씩 커지게 하면서 벡터에 넣었고, 9에서부터 n+1개를 1씩 작아지게 하면서 벡터에 넣었다. 순열을 이용해 해결했다. #include #include #include #include #include using namespace std; char arr[12]; int main() { int n; cin >> n; for (int i = 0; i > arr[i]; } //큰것부터! vector big; vector small; for (int i = 0; i big[i + 1]) status = 1; } } if (status == 0) { break; } } while (prev_permutation(big.begin(), ..