https://www.acmicpc.net/problem/9935
풀이
문자열의 중간을 특정 문자열과 같으면 없애는 문제이다. 왠지 문제가 백준 1406번 에디터문제와 비슷한 것 같아 스택을 2개 놓고 두 스택으로 문자를 옮겨가면서 비교하여 비슷한 문자열이 있으면 제거하면서 출력했는데....코드 길이도 길어지고.....제출하니 시간초과가 떳다...ㅎㅎ
그래서 스택을 하나로 쓰기로 결정!!
1. 우선 arr배열과 bomb 배열로 문자열을 입력받은 후 arr[bottom]배열이 bomb[0]과 같으면 arr[bottom]부터 bomb배열과 비교를 한다. 만약 같을 경우 arr배열을 인덱스 값에 bomb문자열 길이만큼 더해주어 폭탄이 정답을 저정하는 answer배열에 저장이 안 되게한다.
2. 그리고 cc44와 같이 c4는 위의 과정으로 없앨 수 있으나 맨 앞의c는 이미 정답 배열 answer에 저장이 되어있으며 중간의 c4를 제거 후 정답 배열에 c4가 저정된다. 이것을 없애기 위하여 answer의 마지막 문자와 bomb의 마지막 문자를 비교하여 같으면 비교해주어 정답 배열에서 폭탄 문자열을 제거해준다.
1번과정 수행 후
arr : mirkovC4nizCC44 -> 빨간색 표시는 폭탄 문자열과 같으므로 건너띈다.
answer : mikovnizc4 -> 정답배열에 저장된 문자열
2번과정 수행 후
answer : mikovnizc4 ->마지막 문자 4가 폭탄의 마지막 문자 4와 같으므로 검사를 해주어 제거
해준다.
정답
answer : mikovniz
제출한 코드
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include <stdio.h> char arr[1000005], answer[1000005], bomb[40]; int bomb_len,arr_bottom=-1,arr_top,answer_top=-1,flag; void check_1(int location) { int same = 0; for (int i = 0; i < bomb_len; i++) { if (arr[location + i] == bomb[i]) same++; } if (same == bomb_len) { arr_bottom = arr_bottom +bomb_len; return; } return; } vod check_2(int location) { int same = 0; for (int i = 0; i < bomb_len; i++) { if (answer[location - i] == bomb[bomb_len - 1-i]) same++; } if (same == bomb_len) { answer_top = answer_top - bomb_len; return; } return; } int main() { scanf("%s",arr); scanf("%s",bomb); arr_top = strlen(arr)-1; bomb_len = strlen(bomb); while(arr_bottom<arr_top) { if (arr[++arr_bottom] == bomb[0]) { check_1(arr_bottom); } if (arr_bottom > arr_top) break; answer[++answer_top] = arr[arr_bottom]; if (answer[answer_top] == bomb[bomb_len - 1]) { check_2(answer_top); } } if (answer_top == -1) { printf("FRULA"); return 0; } for(int i=0;i<=answer_top;i++) printf("%c",answer[i]); return 0; } | cs |
'SW 업무 관련 > 백준' 카테고리의 다른 글
[BEAKJOON] 1074_Z_C언어 (0) | 2017.08.09 |
---|---|
[BEAKJOON] 3055_탈출_C언어 (0) | 2017.08.07 |
[BEAKJOON] 1992_쿼드트리_C언어 (0) | 2017.08.02 |
[BAEKJOON] 2089_-2진수_C언어 (0) | 2017.08.01 |
[BAEKJOON] 1107_리모컨_C언어 (1) | 2017.08.01 |