반응형
문제 출처 :
https://www.acmicpc.net/problem/13419
알고리즘 분석 :
문제 해결에 필요한 사항
1. 규칙찾기
2. 배열 이용
이 문제는 흔히 내기로 하는 탕수육 게임에 대한 규칙을 찾아내면 끝이다.
규칙은 2가지가 존재한다.
'탕수육'처럼 홀수 일 때,
a 플레이어는 : 탕 육 수 탕 육 수 를 반복한다.
b 플레이어는 : 수 탕 육 수 탕 육 을 반복한다.
즉, a플레이어는 자신이 말해야 될 배열에 탕수육 배열의 홀수값을 먼저 다 넣어두고
그다음 짝수값을 다 넣으면 된다.
예를들어 CROCU를 보자
a플레이어는 홀수부터 다 넣으면 C O U, 그다음 짝수를 넣으면 R C이다. 따라서 C O U R C를 반복하면 된다.
b플레이어는 이와 반대로 짝수부터 다 넣고 -> 홀수를 다 넣으면 된다.
'CROCUS'처럼 짝수 일 때
a플레이어는 홀수 값만 다 넣으면 되고, b 플레이어는 짝수 값만 다 넣으면 된다.
a : C O U
b : R C S
소스 코드 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include <iostream> #include <string.h> using namespace std; char arr[30]; char a[30]; char b[30]; int main() { int n, ja = 0, jb = 0; cin >> n; for(int i = 0 ; i < n; i++) { cin >> arr; int len = strlen(arr); // 길이가 짝수일 때는 하나의 문자열에서 해결 가능 if (len % 2 == 0) { for (int k = 0; k < len; k++) k % 2 == 0 ? a[ja++] = arr[k] : b[jb++] = arr[k]; } // 길이가 홀수일 때는 문자열을 두번 돌아야된다. else { for (int k = 0; k < len; k++) k % 2 == 0 ? a[ja++] = arr[k] : b[jb++] = arr[k]; for (int k = 0; k < len; k++) k % 2 == 0 ? b[jb++] = arr[k] : a[ja++] = arr[k]; } cout << a << endl << b << endl; // 초기화 for (int k = 0; k < len; k++) { a[k] = 0; b[k] = 0; } ja = 0; jb = 0; } return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[1193번] 분수찾기 (0) | 2016.11.02 |
---|---|
[1111번] IQ Test (2) | 2016.11.02 |
[13417번] 카드 문자열 (Deque 활용) (3) | 2016.10.31 |
[9094번] 수학적 호기심 (0) | 2016.10.31 |
[13413번] 오셀로 재배치 (0) | 2016.10.31 |