728x90
SMALL
백준 문제 풀이: 9243 [파일 완전 삭제]
문제 링크: https://www.acmicpc.net/problem/9243
문제 설명:
파일 삭제 시도 횟수 n
이 주어지고, 원본 파일과 삭제 후 파일이 s1
과 s2
로 주어질 때, 삭제가 성공했는지 확인하는 문제입니다. 삭제 시도가 홀수 번이면 파일의 모든 비트가 반전되고, 짝수 번이면 원래 상태를 유지합니다. 삭제가 성공했으면 Deletion succeeded
, 실패했으면 Deletion failed
를 출력합니다.
문제 해결 코드
// 백준 9243 - 파일 완전 삭제
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n; // 삭제 시도 횟수
string s1, s2;
cin >> s1 >> s2; // 원본 파일과 삭제 후 파일 입력
if (n % 2 == 0) {
// 짝수 번 삭제 시도: 원본 파일과 삭제 후 파일이 동일해야 성공
if (s1 == s2) {
cout << "Deletion succeeded\n";
} else {
cout << "Deletion failed\n";
}
} else {
// 홀수 번 삭제 시도: 모든 비트가 반전된 상태여야 성공
for (int i = 0; i < s1.size(); i++) {
if (s1[i] == s2[i]) {
cout << "Deletion failed\n";
return 0;
}
}
cout << "Deletion succeeded\n";
}
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명.
- 핵심 알고리즘:
- 짝수 번 삭제 시도:
s1
과s2
가 같아야 성공합니다. - 홀수 번 삭제 시도:
s1
과s2
의 각 문자가 모두 반전된 상태여야 성공합니다.
- 짝수 번 삭제 시도:
- 구현 세부사항:
- 반전 여부 확인 시,
s1[i] == s2[i]
인 경우 실패로 처리합니다. - 문자열 비교는 O(n)으로 수행됩니다.
- 반전 여부 확인 시,
- 시간 복잡도 분석:
- 문자열 길이를
m
이라 할 때, 한 번의 문자열 비교 또는 반복은 O(m)입니다. - 총 시간 복잡도: O(m).
- 문자열 길이를
결과
제출 시, 모든 테스트 케이스에 대해 올바른 결과를 출력합니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 문자열' 카테고리의 다른 글
백준 1755번 [숫자놀이](C++) -yes6686- 티스토리 (0) | 2024.11.14 |
---|---|
백준 10769번 [행복한지 슬픈지](C++) -yes6686- 티스토리 (0) | 2024.07.18 |
백준 9996번 [한국이 그리울 땐 서버에 접속하지](C++) -yes6686- 티스토리 (0) | 2024.07.16 |
백준 16171번 [나는 친구가 적다 (Small)](C++) -yes6686- 티스토리 (0) | 2024.07.16 |
백준 11656번 [접미사 배열](C++) -yes6686- 티스토리 (0) | 2024.07.13 |