본문 바로가기

BAEKJOON/문자열

백준 9243번 [파일 완전 삭제](C++) -yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 9243 [파일 완전 삭제]


문제 링크: https://www.acmicpc.net/problem/9243

문제 설명:

파일 삭제 시도 횟수 n이 주어지고, 원본 파일과 삭제 후 파일이 s1s2로 주어질 때, 삭제가 성공했는지 확인하는 문제입니다. 삭제 시도가 홀수 번이면 파일의 모든 비트가 반전되고, 짝수 번이면 원래 상태를 유지합니다. 삭제가 성공했으면 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;
}

코드 설명

코드의 주요 로직과 사용된 알고리즘 설명.

  • 핵심 알고리즘:
    • 짝수 번 삭제 시도: s1s2가 같아야 성공합니다.
    • 홀수 번 삭제 시도: s1s2의 각 문자가 모두 반전된 상태여야 성공합니다.
  • 구현 세부사항:
    • 반전 여부 확인 시, s1[i] == s2[i]인 경우 실패로 처리합니다.
    • 문자열 비교는 O(n)으로 수행됩니다.
  • 시간 복잡도 분석:
    • 문자열 길이를 m이라 할 때, 한 번의 문자열 비교 또는 반복은 O(m)입니다.
    • 총 시간 복잡도: O(m).

결과

제출 시, 모든 테스트 케이스에 대해 올바른 결과를 출력합니다.

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST