[백준] 14714번: 홍삼게임 (Easy) - Python

2023. 8. 8. 00:32·Algorithm (PS)
728x90

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

 

14714번: 홍삼 게임 (Easy)

첫 번째 줄에 “질서 있는 홍삼 게임”의 참가자의 수 N(2 ≤ N ≤ 500), 은하가 먼저 지목한 사람의 번호 A와 두 번째로 지목한 사람의 번호 B(1 ≤ A, B ≤ N, A ≠ B), 각 지목권의 지목 간격을 나타내

www.acmicpc.net

문제 유형을 보면 힌트를 얻을 수 있는데, BFS를 사용하여 풀 수 있는 문제였다.. 

 방문 처리를 할 때 지목권 a를 가질 사람을 탐색 & 지목권 b를 가질 사람을 탐색 해야 하며 각 turn 마다 지목은 한번만 하므로 이를 3차원 배열로 나타낼 수 있다는 것이 이 문제의 핵심이었다 

즉 이를 3차원 배열로 표현하게 되면 

visited[지목권 종류][a 지목][b 지목]

가 된다. 

BFS 탐색 코드에서는 queue 에서 꺼내어 확인하는데, 현재의 turn 이 홀수면 A를 지목하게 되고 짝수면 B를 지목하게 된다. 

if count % 2 == 1: # A
	...
else: # B
	...

방문처리를 할 때 이미 다른 지목권을 가지고 있는 경우라면 게임이 끝나는 것이므로 queue에 담지 않으면 된다. 

if visited[0][left_a][cur_b] == 0:
    visited[0][left_a][cur_b] = count + 1
    queue.append((left_a, cur_b, count+1))
if visited[0][right_a][cur_b] == 0:
    visited[0][right_a][cur_b] = count + 1
    queue.append((right_a, cur_b, count+1))

 

전체 코드 

 

# https://www.acmicpc.net/problem/14714
from collections import deque

n, a, b, da, db = map(int, input().split())
a -= 1
b -= 1 # index 맞추기

#  visited[a or b][a누구][b누구]

visited = [[[0] * n for _ in range(n)] for _ in range(2)] # 3차원 배열
visited[0][a][b] = 1 # 0 == a 지목권
visited[1][a][b] = 1 # 1 == b 지목권
queue = deque([(a, b, 1)]) # 현재 지목권 가진 사람 a, b, 지목 횟수

while queue:
    cur_a, cur_b, count = queue.popleft()
    if count % 2 == 1: # A
        left_a = cur_a - da
        right_a = cur_a + da
        if left_a < 0:
            left_a += n
        if right_a >= n:
            right_a -= n
        # 방문 처리
        if visited[0][left_a][cur_b] == 0:
            visited[0][left_a][cur_b] = count + 1
            queue.append((left_a, cur_b, count+1))
        if visited[0][right_a][cur_b] == 0:
            visited[0][right_a][cur_b] = count + 1
            queue.append((right_a, cur_b, count+1))
    else: # B
        left_b = cur_b - db
        right_b = cur_b + db
        if left_b < 0:
            left_b += n
        if right_b >= n:
            right_b -= n

        if visited[1][cur_a][left_b] == 0:
            visited[1][cur_a][left_b] = count + 1
            queue.append((cur_a, left_b, count+1))
        if visited[1][cur_a][right_b] == 0:
            visited[1][cur_a][right_b] = count + 1
            queue.append((cur_a, right_b, count+1))

INF = int(1e9)
answer = INF
# min 값 찾기
for i in range(n):
    if visited[0][i][i] != 0 and visited[0][i][i] < answer:
        answer = visited[0][i][i]
    if visited[1][i][i] != 0 and visited[1][i][i] < answer:
        answer = visited[1][i][i]

if answer == INF:
    print("Evil Galazy")
else:
    print(answer-1)
728x90

'Algorithm (PS)' 카테고리의 다른 글

[백준] 2631번: 줄세우기 (Python) | 가장 긴 증가하는 부분 수열 구하기  (0) 2023.08.19
[Programmers] 퍼즐조각 채우기 Python  (0) 2023.08.12
[백준] 28305번: 세미나 배정 (Python/파이썬)  (0) 2023.07.23
[프로그래머스/Kakao] 압축 python  (0) 2023.07.11
[백준] 17142번 - 연구소 3 (Python/파이썬)  (0) 2023.06.28
'Algorithm (PS)' 카테고리의 다른 글
  • [백준] 2631번: 줄세우기 (Python) | 가장 긴 증가하는 부분 수열 구하기
  • [Programmers] 퍼즐조각 채우기 Python
  • [백준] 28305번: 세미나 배정 (Python/파이썬)
  • [프로그래머스/Kakao] 압축 python
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (612)
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (29)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (4)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • Kubernetes
  • 데이터엔지니어링
  • 리눅스
  • 파이썬
  • 쿠버네티스
  • AWS
  • 백트래킹
  • 알고리즘
  • 운영체제
  • Databricks
  • 프로그래머스
  • 클라우드
  • 백준
  • EC2
  • SPARK
  • 데이터엔지니어
  • BFS
  • dp
  • dfs
  • docker
  • 스파크
  • python
  • 데이터브릭스
  • Leetcode
  • 빅데이터
  • 코딩테스트
  • Swift
  • ansible
  • linux
  • 카카오코딩테스트

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[백준] 14714번: 홍삼게임 (Easy) - Python
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.