Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dfs
- BFS
- 에라토스테네스의 체
- dynamic programming
- 삼성 기출
- 완전탐색
- 백트래킹
- 브루트포스
- 스택
- 백준
- 삼성 SDS 대학생 알고리즘 특강
- 시뮬레이션
- 동적 계획법
- Algorithm
- DP
- PS
- hackerrank
- 다이나믹 프로그래밍
- koitp
- sw expert academy
- SWEA
- 잠실
- 소수
- 해커랭크
- BOJ
- 구현
- 그리디
- 맛집
- C++
- 알고리즘
Archives
- Today
- Total
펭로그
[C++] 백준 BOJ 9935 문자열 폭발 본문
문제링크 : https://noj.am/9935
요즘 알고리즘 테스트 문제들이 파싱 문제들이 하도 많이 나와서 연습해볼겸 별 의미는 없지만 string stream을 사용하여 풀어보았다.
string stream을 통하여 입력된 문자열이 폭발 문자열의 '마지막 문자'에 해당할 경우 이전에 입력되었던 문자열이 폭발 문자열과 일치하는지 체크하는 방법으로 풀이했다. 본 풀이법은 스택을 사용한 풀이법이라 할 수 있다.
예제에서는 "C4"가 폭발 문자열이다.
아래의 조건에서 '4'를 찾았다면 문자열 탐색이 실행된다.
1 | if (s == bomb.back()) | cs |
먼저 idx 변수를 폭발 문자열 크기만큼 뺀 인덱스로 초기화 시켜준다.
폭발 문자열의 맨 앞인 'C'에 해당하는 값이다.
1 2 3 | int idx = result.size() - bomb.size(); // 인덱스가 0보다 작을 수 없음 if (idx < 0) continue; | cs |
idx를 하나씩 늘려가면서 폭발 문자열 탐색을 수행해준다.
1 2 3 4 5 6 7 8 9 10 11 | // 변수 설정 bool del = true; int size = bomb.size(); // 폭발 문자열 탐색 for(int i = 0; i < size; i++) { // 하나라도 다른 문자 나오면 탈출 if (result[idx++] != bomb[i]) { del = false; break; } } | cs |
C++의 string 클래스는 컨테이너 형태이기 때문에 push_back() 함수로 글자 제거가 가능하다.
1 2 | // 문자열 제거 if(del) while(size--) result.pop_back(); | cs |
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 | // BOJ 9935 문자열 폭발 #include <iostream> #include <string> #include <sstream> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); freopen("../input.txt", "r", stdin); string input; // 입력 문자열 string bomb; // 폭발 문자열 string result; cin >> input >> bomb; stringstream ss(input); char s; // 문자열 탐색을 위한 변수 while (ss >> s) { result.push_back(s); // 입력 문자가 bomb의 끝 문자랑 같으면 실행 if (s == bomb.back()) { int idx = result.size() - bomb.size(); // 인덱스가 0보다 작을 수 없음 if (idx < 0) continue; // 변수 설정 bool del = true; int size = bomb.size(); // 폭발 문자열 탐색 for(int i = 0; i < size; i++) { // 하나라도 다른 문자 나오면 탈출 if (result[idx++] != bomb[i]) { del = false; break; } } // 문자열 제거 if(del) while(size--) result.pop_back(); } } if(result.size() == 0) cout << "FRULA"; else cout << result; return 0; } | cs |
'Study > PS(Algorithm)' 카테고리의 다른 글
[C++] 백준 BOJ 5639 이진 검색 트리 (1) | 2018.10.12 |
---|---|
[C++] 백준 BOJ 6603 로또 (0) | 2018.10.08 |
[C++] 백준 BOJ 9095 1,2,3 더하기 (0) | 2018.10.06 |
[C++] 백준 BOJ 2583 영역 구하기 (0) | 2018.10.06 |
[C++] Codeforces Round #514 (Div. 2) - C. Sequence Transformation (0) | 2018.10.06 |
Comments