Carnival7
Change Developer
Carnival7
전체 방문자
오늘
어제
  • 분류 전체보기
    • 자바의 정석
    • 프로그래밍 언어별 tools
      • 파이썬
      • 자바
    • 코딩 테스트
      • 백준 강의 기초편
      • 백준 강의 연습편
      • 백준 강의 문제편
      • 삼성 기출
      • 백준 - 일반
      • 카카오 기출
      • 프로그래머스 - 일반
      • 코테 풀이 Tools
    • CS
      • Network
      • 운영체제
      • 알고리즘
      • DB
    • Web_Backend
      • Spring
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
      • 스프링 핵심 원리 - 기본편
    • DevOps
    • IT 업무 지식
      • 인프라
      • 클라우드
    • 자격증
      • AWS - CLF
      • 정처기 - 실기
    • 생각 정리

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 슬라이딩 윈도우 #덱
  • nginx
  • DevOps
  • 삼성기출 #2023 #상반기
  • code deploy
  • 스프링 부트 무중단 웹 서비스
  • Github Actions
  • ci/cd
  • 스프링 #인터셉터 #AOP #필터
  • 슬라이딩 윈도우
  • 스프링 #AOP
  • DMZ
  • 프로그래머스 #카카오기출 #레벨2
  • 코딩테스트 #삼성기출 #구현 #시뮬레이션
  • 알고리즘 #백준강의기초편 #코딩테스트
  • 삼성기출 #백준강의문제편

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Carnival7
코딩 테스트/삼성 기출

2018상_이상한 체스(백준 15684.사다리 조작)

코딩 테스트/삼성 기출

2018상_이상한 체스(백준 15684.사다리 조작)

2024. 6. 16. 14:36

https://www.codetree.ai/training-field/frequent-problems/problems/odd-chess/description?page=3&pageSize=20

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

import sys
from itertools import product
from copy import deepcopy

input=sys.stdin.readline

n,m=map(int,input().split())
a=[list(map(int,input().split())) for _ in range(n)]
ans=int(1e9)
cnt=0
cpos=[]
cno=[]

#  우,하,좌,상
dx=[0,1,0,-1]
dy=[1,0,-1,0]

def inBoard(nx,ny):
    if 0<=nx<n and 0<=ny<m:
        return True
    return False

def check(a,pos,d):
    x,y=pos
    nx,ny=x+dx[d],y+dy[d]
    while inBoard(nx,ny):
        if a[nx][ny]==6:
            break
        elif a[nx][ny]==0:
            a[nx][ny]='#'
        x,y=nx,ny
        nx,ny=x+dx[d],y+dy[d]
    return a

# 맵의 각 cctv의 번호와 위치에서 주어진 방향대로 감시 영역 표시
def watch(a,d,pos,no):
    if no==1:
        a=check(a,pos,d)
    elif no==2:
        a=check(a,pos,d)
        a=check(a,pos,(d+2)%4)
    elif no==3:
        a = check(a, pos, d)
        a = check(a, pos, (d+1)%4)
    elif no==4:
        a = check(a, pos, d)
        a = check(a, pos, (d+1)%4)
        a = check(a, pos, (d + 2) % 4)
    return a

def process(a,prod):
    result=0
    # 각 감시 방향대로 cctv 방향 조정 후 사각지대 크기 측정
    for inx,d in enumerate(prod):
        a=watch(a,d,cpos[inx],cno[inx])
    for x in range(n):
        for y in range(m):
            if a[x][y]==0:
                result+=1
    return result

for x in range(n):
    for y in range(m):
        if a[x][y]=='#':
            continue
        if 1<=a[x][y]<=4:
            cno.append(a[x][y])
            cpos.append([x,y])
            cnt += 1
        elif a[x][y]==5:
            for d in range(4):
                a=check(a,[x,y],d)

# 모든 cctv의 감시 방향 조합의 경우의 수
for prod in product([0,1,2,3],repeat=cnt):
    # 이번 감시 방향 조합으로 사각지대 최소 크기 구하기
    res=process(deepcopy(a),prod)
    ans=min(ans,res)

print(ans)

'코딩 테스트 > 삼성 기출' 카테고리의 다른 글

2018상_병원 거리 최소화하기(백준. 15686.치킨 배달)  (0) 2024.06.22
2018상_드래곤 커브(백준. 15685.드래곤 커브)  (0) 2024.06.22
2018상_디버깅(백준 15684.사다리 조작.py)  (1) 2024.06.16
2017하_보도블럭  (0) 2024.06.09
2017하_조삼모사  (0) 2024.06.09
    '코딩 테스트/삼성 기출' 카테고리의 다른 글
    • 2018상_병원 거리 최소화하기(백준. 15686.치킨 배달)
    • 2018상_드래곤 커브(백준. 15685.드래곤 커브)
    • 2018상_디버깅(백준 15684.사다리 조작.py)
    • 2017하_보도블럭
    Carnival7
    Carnival7

    티스토리툴바

    단축키

    내 블로그

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

    블로그 게시글

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

    모든 영역

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

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