[Python] 백준 3806 S를 T로

2022. 4. 17. 15:13·CS/알고리즘 & 문제풀이

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

 

3806번: S를 T로

첫째 줄에 테스트 케이스의 개수 C (C ≤ 200)가 주어진다. 각 테스트 케이스는 두 줄로 이루어져 있다. 첫째 줄에는 '0', '1', '?'로 이루어진 S, 둘째 줄에는 '0', '1'로 이루어진 T가 주어진다. 두 문자

www.acmicpc.net

 

1. 접근 방법

접은 방법을 조금 고민했는데, 가능한 조건이 많지는 않지만, BFS나 DP로는 적합하지 않을 것 같아 그리디한 방식을 탐색했다.


2. 풀이 코드

🖥python 코드 링크 :https://github.com/mintropy/PS/blob/master/BAEKJOON/Python/3000/3806.py

 

GitHub - mintropy/PS: 다양한 알고리즘 문제 풀이 저장소입니다.

다양한 알고리즘 문제 풀이 저장소입니다. Contribute to mintropy/PS development by creating an account on GitHub.

github.com

📕코드 해설

우선 문자열의 각 자리마다, S에서 T의 각 위치마다 튜플로 묶어 저장했다.

각 부분은 문자열로, 즉 '0', '1', '?'로 저장되지만, 이 글에서는 따옴표를 제외하고 작성함.

S 0 1 ? ? 0 0
T 0 0 1 0 1 0
  (0, 0) (1, 0) (?, 1) (?, 0) (0, 1) (0, 0)

이 때, 0에서 0으로, 1에서 1로 변경되는 경우는 무시해도 된다. 그래서 나머지 전후 변경되는 조건은 (0, 1), (1, 0), (?, 0), (?, 1)만 남게 된다. 그리고 여기서 각 조건을 어떻게 처리할지 고민해야 한다.

그리고 S문자열에서의 연산으로 변경되는 것을 교환이라고 이 글에서 작성했다.

 

1. (1, 0)을 제외한 나머지는 주어진 조건으로 해결할 수 있다. 그러므로 (1, 0)을 어떻게 해결할지 고민하는게 가장 중요하다.

2. 만약 (1, 0)과 (0, 1)을 교환한다면, 한 번의 연산으로 해결할 수 있다.

3. 만약 (1. 0)과 (?, 1)을 교환한다면, 두 번의 연산으로 해결할 수 있다.

 

이 조건을 고려하여, (1, 0)을 순서대로 (0, 1), (?, 1)과 교환하고, 연산횟수는 각각 1, 2회씩 더한다.

이 연산을 끝내고 (1, 0)이 남는다면 방법이 없으므로 -1을, 만약에 남지 않는다면 나머지 (0, 1), (?, 0), (?, 1)의 개수만큼 출력값에 더한다.


3. 생각 정리

나름 조건은 단순해서, 하나하나 이어나가며 해결했다.

'CS > 알고리즘 & 문제풀이' 카테고리의 다른 글

[Python] 백준 5527 일루미네이션  (0) 2022.07.11
[알고리즘] 이분 매칭(Bipartite Matching)  (0) 2022.05.22
[Python] 2212 센서  (0) 2022.03.25
[Python] 백준 2533 사회망 서비스(SNS)  (0) 2022.03.22
[Python] 백준 13335 트럭  (0) 2022.03.21
'CS/알고리즘 & 문제풀이' 카테고리의 다른 글
  • [Python] 백준 5527 일루미네이션
  • [알고리즘] 이분 매칭(Bipartite Matching)
  • [Python] 2212 센서
  • [Python] 백준 2533 사회망 서비스(SNS)
mintropy
mintropy
민트로피의 하루하루 오늘보다 더 나은 내일
  • mintropy
    민트로피의 민트초코
    mintropy
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 생각 정리
        • 코딩테스트
        • SSAFY
      • 디지털 노트
        • Obsidian.md
        • Notion
      • CS
        • 알고리즘 & 문제풀이
        • AI
        • DB
        • 디자인패턴
      • Projects
      • Python
        • Python Web Framework
      • JavaScript
        • React.js
      • Docker
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    web framework
    Python
    Combinatorics
    dfs
    파이썬
    프로젝트
    ps
    line
    회고
    알고리즘
    project_zero
    백준
    SSAFY
    카카오
    코딩테스트
    union-find
    fastapi
    DRF
    그리디
    trie
    게임이론
    bfs
    프로그래머스
    pydantic
    조건분기
    DP
    markdown
    브루트포스
    구현
    django
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
mintropy
[Python] 백준 3806 S를 T로
상단으로

티스토리툴바