[백준] 16197번: 두 동전 python (백트래킹/dfs)

2023. 3. 20. 11:39·Algorithm (PS)
728x90

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

 

16197번: 두 동전

N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고,

www.acmicpc.net

느리긴하지만 통과했다 ㅎㅎ.. 

문제를 처음에 제대로 안읽어서 두가지 원인으로 삽질을 했다. 

1. 동전 1개만!!!!!!! 떨어뜨려야 한다 2개 떨어뜨리는건 안되고 꼭 1개만이다 .... 

2. 벽을 만났을 때 ('#') 이동하지 않는다. 주의할 점은 벽을 만나서 이동하지 않다가 그다음 버튼누를때 다른 방향으로 이동을 시도하는 것이 가능하다는 것이다. 따라서 벽을 만났다고 해서 그 동전을 떨어뜨린 처리를 하면 안된다. 

import sys 
input = sys.stdin.readline

n, m = map(int, input().split())
board = []
coin_list = []
answer = 11
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

for i in range(n):
    data = input()
    temp = []
    for j in range(m):
        if data[j] == 'o':
            coin_list.append([i, j])
        temp.append(data[j])
    board.append(temp)

# 동전의 범위 확인 
def check_range(x, y):
    if 0 <= x < n and 0 <= y < m:
        return True 
    else:
        return False 
removed = [0, 0]
def dfs(step, coins):
    global answer 
    if step > 10:
        return  
    if sum(removed) == 2:
        return  
    if sum(removed) == 1:
        answer = min(step, answer)
        return 

    for i in range(4): # 네 방향 확인 
        removed_idx = []
        new_coin = []
        for j in range(2):
            nx = coins[j][0] + dx[i]
            ny = coins[j][1] + dy[i]
            
            new_coin.append([nx, ny])
            
        for k in range(2):
            x = new_coin[k][0]
            y = new_coin[k][1]
            if not check_range(x, y):
                removed_idx.append(k)
                removed[k] = 1 
            else:
                if board[x][y] == '#': # 벽을 만나면 이동하지 않아야 하므로 이전 위치로 되돌린다 
                    new_coin[k][0] -= dx[i]
                    new_coin[k][1] -= dy[i] 
            

        dfs(step+1, new_coin)
        for j in removed_idx:
            removed[j] = 0 # 다시 동전을 살림 
        

dfs(0, coin_list)

if answer > 10:
    print(-1)
else:
    print(answer)
728x90

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

[백준] 17394 핑거 스냅 (Python)  (0) 2023.03.22
에라토스테네스의 체 (소수판별 알고리즘) Python  (0) 2023.03.22
[백준] 9997번: 폰트 - 비트마스킹 Python  (0) 2023.03.19
[백준] 9205번: 맥주 마시면서 걸어가기 Python  (0) 2023.03.11
[백준] 2170번: 선 긋기 Python - 스위핑 알고리즘, 정렬  (0) 2023.03.06
'Algorithm (PS)' 카테고리의 다른 글
  • [백준] 17394 핑거 스냅 (Python)
  • 에라토스테네스의 체 (소수판별 알고리즘) Python
  • [백준] 9997번: 폰트 - 비트마스킹 Python
  • [백준] 9205번: 맥주 마시면서 걸어가기 Python
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minji's engineering noteData Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613)
    • 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)
    • 개발일기 (30)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

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

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[백준] 16197번: 두 동전 python (백트래킹/dfs)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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