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

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Carnival7

Change Developer

코딩 테스트/백준 강의 기초편

구현) 1917.정육면체 전개도

2021. 9. 15. 18:27

문제 : https://www.acmicpc.net/problem/1917

 

1917번: 정육면체 전개도

세 개의 입력 데이터가 주어지며, 각각의 입력 데이터는 여섯 개의 줄로 이루어져 있다. 각 데이터는 여섯 개의 줄에 걸쳐 여섯 개의 숫자가 빈 칸을 사이에 두고 주어진다. 숫자는 0 또는 1로 이

www.acmicpc.net

# 정육면체 전개도는 총 11가지
cubes = [
    [[1,0,0,0],
     [1,1,1,1],
     [1,0,0,0]],
    [[0,1,0,0],
     [1,1,1,1],
     [1,0,0,0]],
    [[0,0,1,0],
     [1,1,1,1],
     [1,0,0,0]],
    [[0,0,0,1],
     [1,1,1,1],
     [1,0,0,0]],
    [[0,1,0,0],
     [1,1,1,1],
     [0,1,0,0]],
    [[0,0,1,0],
     [1,1,1,1],
     [0,1,0,0]],
    [[0,0,1,1,1],
     [1,1,1,0,0]],
    [[0,0,1,1],
     [0,1,1,0],
     [1,1,0,0]],
    [[0,0,1,1],
     [1,1,1,0],
     [1,0,0,0]],
    [[1,1,0,0],
     [0,1,1,1],
     [0,1,0,0]],
    [[0,1,0,0],
     [1,1,1,0],
     [0,0,1,1]]
]

# 90도 회전
def rotate(a):
  n = len(a)
  m = len(a[0])

  result = [[0]* n for _ in range(m)]

  for i in range(n):
    for j in range(m):
      result[j][n-i-1] = a[i][j]
  return result

# 상하, 좌우 반전
def mirror(mir,cube):
    # mir = 0 이면 상하반전
    if mir==0:
        cube = cube[::-1]
    # mir = 1 이면 좌우반전
    elif mir == 1:
        for i in range(len(cube)):
            cube[i]=cube[i][::-1]
    return cube

# 해당 큐브 범위 내에서, 보드의 숫자 구성과 일치하는 지 체크
def check(a,c,x,y):
    n=len(a)
    for i in range(len(c)):
        for j in range(len(c[0])):
            nx=x+i
            ny=y+j
            # 보드의 범위 내에서 체크
            if 0<=nx<n and 0<=ny<n:
                # 해당 큐브 범위 내 보드와 큐브의 숫자 구성이 다르면
                if a[nx][ny] != c[i][j]:
                    # False
                    return False
            else:
                return False
    return True

for _ in range(3):
    a = []
    for _ in range(6):
        a.append(list(map(int,input().split())))
    ans = False
    for cube in cubes:
        # 큐브당 상하, 좌우 반전
        for mir in range(2):
            # 큐브당 90도 회전 3번 - 360도 회전은 회전 전과 동일
            for rot in range(4):
                for x in range(6):
                    for y in range(6):
                        ans |= check(a,cube,x,y)
                cube=rotate(cube)
            cube = mirror(mir,cube)
    print("yes" if ans else "no")

'코딩 테스트 > 백준 강의 기초편' 카테고리의 다른 글

DP) 11057.오르막 수  (0) 2022.02.14
DP) 1149.RGB 거리  (0) 2022.02.11
구현)16931.겉넓이 구하기  (0) 2021.08.24
구현)2290.LCD Test  (0) 2021.08.23
구현) 14503. 로봇 청소기  (0) 2021.08.20
    '코딩 테스트/백준 강의 기초편' 카테고리의 다른 글
    • DP) 11057.오르막 수
    • DP) 1149.RGB 거리
    • 구현)16931.겉넓이 구하기
    • 구현)2290.LCD Test
    Carnival7
    Carnival7

    티스토리툴바