이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

포렌식 & 개발 이야기 - Forensics & Development

Pental - Forensics / iOS / Windows / Android / Kakaotalk / Telegram / Etc

[골드 4] 백준 12886 - 돌 그룹 (파이썬)

  • 2025.04.29 13:55
  • Programming/백준
글 작성자: pental

https://www.acmicpc.net/problem/12886

풀이

  • 돌이 A, B, C 그룹에 있다.
  • 한번의 연산이 진행된다.
    • 돌 수가 다른 두 그룹을 골라서, 돌 수가 적은 쪽을 2배로 만들고
    • 많은 쪽에서는 그 차이만큼 뺀다.
  • 세 그룹의 돌 수를 모두 같게 만들수 있는가?
if S % 3 != 0:
    print(0)

총합이 3의 배수가 아니라면 절대 세 그룹을 같은 수로 만들 수 없다.

visit = [[False] * S for _ in range(S)]

visit[a][b]가 True이면 (a, b, c = S - a - b)상태를 이미 방문 했다는 의미,

a와 b만 알면 c는 S - a - b로 자동 결정되기 때문에 2차원 배열만 사용한다.

queue = deque()
queue.append((A, B))
visit[A][B] = True

초기 상태를 삽입하고 BFS 탐색을 시작한다.

while len(queue) != 0:
    a, b = queue.popleft()
    c = S - a - b

현재 상태를 꺼내고, 세 그룹의 상태를 a, b, c로 만든다.

D = [a, b, c]
for i in range(3):
    x, y = D[i], D[(i + 1) % 3]

모든 쌍에 대해서 연산을 시도한다. (a, b), (b, c), (c, a) 모든 쌍을 확인한다.

if x == y:
    continue
if x > y:
    x, y = y, x
if not visit[x + x][y - x]:
    queue.append((x + x, y - x))
    visit[x + x][y - x] = True

두그룹의 돌 개수가 같으면 의미 없는 연산이므로 패스하고, x가 항상 더 작은 값이 되도록 정렬한다.

작은 쪽은 2개로 커지고, 큰 쪽은 그 차이만큼 줄어든다.

만들어진 새로운 상태 (x + x, y - x)를 방문한 적 없으면 큐에 추가한다.

if visit[S // 3][S // 3]:
    print(1)
else:
    print(0)

(S // 3, S // 3) 상태에 도달할 수 있으면, 세 그룹이 모두 S / 3 개가 된것이다.

코드

# 백준 12886 - 돌 그룹
# 분류 : BFS

from collections import deque

A, B, C = map(int, input().split())
S = A + B + C

if S % 3 != 0 :
    print(0)
else :
    visit = [[False] * S for _ in range(S)] # S * S

    queue = deque()
    queue.append((A, B))
    visit[A][B] = True

    while len(queue) != 0 :
        a, b = queue.popleft()
        c = S - a - b

        D = [a, b, c]
        for i in range(3) :
            x, y = D[i], D[(i + 1) % 3]

            if x == y :
                continue
            if x > y :
                x, y = y, x
            if not visit[x + x][y - x] :
                queue.append((x + x, y - x))
                visit[x + x][y - x] = True
    
    if visit[S // 3][S // 3] :
        print(1)
    else :
        print(0)
저작자표시 비영리 (새창열림)

'Programming > 백준' 카테고리의 다른 글

[실버 4] 백준 10211 - Maximun Subarray (파이썬)  (0) 2025.04.30
[실버 1] 백준 16198 - 에너지 모으기 (파이썬)  (1) 2025.04.30
[실버 1] 백준 3184 - 양 (파이썬)  (0) 2025.04.29
[실버 3] 백준 28353 - 고양이 카페 (파이썬)  (1) 2025.04.29
[골드 3] 백준 3673 - 나눌 수 있는 부분 수열 (파이썬)  (0) 2025.04.29

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [실버 4] 백준 10211 - Maximun Subarray (파이썬)

    [실버 4] 백준 10211 - Maximun Subarray (파이썬)

    2025.04.30
  • [실버 1] 백준 16198 - 에너지 모으기 (파이썬)

    [실버 1] 백준 16198 - 에너지 모으기 (파이썬)

    2025.04.30
  • [실버 1] 백준 3184 - 양 (파이썬)

    [실버 1] 백준 3184 - 양 (파이썬)

    2025.04.29
  • [실버 3] 백준 28353 - 고양이 카페 (파이썬)

    [실버 3] 백준 28353 - 고양이 카페 (파이썬)

    2025.04.29
다른 글 더 둘러보기

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

카테고리

  • Category (452)
    • Forensics (105)
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (24)
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (7)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (260)
      • C (10)
      • Python (11)
      • 백준 (206)
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 포렌식
  • 프로그래머스
  • 파이썬
  • 디지털포렌식
  • pental
  • axiom
  • 백준
  • Forensics
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바