알고리즘과 자료구조 28

BOJ 14891 톱니바퀴

www.acmicpc.net/problem/14891 14891번: 톱니바퀴 첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 www.acmicpc.net 문제 해결 전략 톱니바퀴를 배열로 구해서, 시계 방향 또는 반시계 방향으로 swap한다. 나머지는 문제에서 제시한 대로 진행 소스 #include #include using namespace std; int tob[5][9]; int k; void spin(int num, int dir){ if(dir == 1){ // 시계 방향 for(int i = 8; i >= 2; i--){ swap(tob[num]..

BOJ 14888 연산자 끼워넣기

www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 문제 해결 전략 소스 코드 #include using namespace std; #define MAX 12 #define endl "\n" int arr[MAX]; int oper[4]; int n; int minNum = 1e9, maxNum = -1 * (1e9); void dfs(int cnt, int num) { if(cnt == n - 1) { i..

BOJ 13458 시험 감독

www.acmicpc.net/problem/13458 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net 문제 해결 전략 소스 코드 #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long N, tot = 0; int b, c; cin >> N; vector v; v.resize(100000..

BOJ 2018 수들의 합 5

www.acmicpc.net/problem/2018 2018번: 수들의 합 5 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1≤N≤10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한다. www.acmicpc.net 문제 해결 전략 자연수 N을 연속된 자연수의 합으로 만들 수 있는 경우의 수를 구하는 문제이다. totalNum이 정답이며 자연수 N을 구할 때 자기 자신도 포함이므로 totalNum을 1로 초기화 했다. sum에 연속된 수를 더하면서 sum이 N과 같다면 totalNum을 +1 하는 방식으로 정답을 구했다. 소스 #include #include #include #include #include..

BOJ 11005 진법 변환 2

www.acmicpc.net/problem/11005 11005번: 진법 변환 2 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 문제 해결 전략 10진법의 수를 B진법(2 n >> m; string ans = ""; while(1) { if(n == 0) break; int num = n % m; n = (n / m); if (num 10 ans += (char)(num - 10 + 'A'); } } reverse(ans.begin(), a..

BOJ 14889 스타트와 링크

www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 문제 해결 전략 이 문제는 n(짝수)명에서 2/n개를 고르고 이를 스타트 팀과 링크 팀으로 나눠 점수를 구하는 방식이다. 조합 방식으로 n/2개를 선택한 후에 각각 vector에 넣고, 이를 나누어 점수를 계산하였다. 소스 #include #include #include using namespace std; #define MAX 20 #define endl "\n" int n; int map[MAX][MAX]; bool check[..