[백준] 14890번 경사로 Python 구현문제

2023. 1. 13. 13:28·Algorithm (PS)
728x90

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

 

14890번: 경사로

첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다.

www.acmicpc.net

원래는 row 별 갈수 있는 길, column 별 갈 수 있는길을 각각 함수로 만들어줄까 했다. 

그래서 원래는 row 체크중이면 type 1 column 체크중이면 type2로 할까했는데.. 생각해보니까 

 check_row 함수를 재활용하고 배열을 90도 시계방향으로 돌려서 array를 parameter로 전달하면 될것 같아서 따로 column 을 확인하는 함수를 만들지 않았다 (사실 귀찮아서..)

그래서 코드에 저 type 변수는 무시해도 된다..

new_array = list(map(list, zip(*array[::-1])))

이게 90도 시계방향으로 돌리는 코드이다 

n, length = map(int, input().split())
array = []
for i in range(n):
    array.append(list(map(int, input().split())))
answer = 0
visited = [[False] * n for _ in range(n)]

def is_in_range(x, y):
    if 0 <= x < n and 0 <= y < n:
        return True
    else:
        return False

def check_further(x, y, type, array):
    if type == 1: # row
        for i in range(1, length+1):
            if is_in_range(x, y+i):
                if array[x][y] -1 == array[x][y+i] and not visited[x][y+i]:
                    visited[x][y + i] = True
                else:
                    return False
            else:
                return False
        return True

def check_before(x, y, type, array):
    if type == 1:
        for i in range(1, length):
            if is_in_range(x, y-i):
                if array[x][y] == array[x][y-i] and not visited[x][y-i]:
                    visited[x][y-i] = True
                else:
                    return False
            else:
                return False
        return True

def check_row(array):
    global answer
    for i in range(n):
        flag = True
        for j in range(n-1):
            if array[i][j] == array[i][j+1]:
                continue
            if array[i][j]-1 == array[i][j+1]:
                if not visited[i][j+1]:
                    if check_further(i, j, 1, array):
                        visited[i][j + 1] = True
                    else:
                        flag = False
                        break
                else:
                    flag = False
                    break
            if array[i][j]+1 == array[i][j+1]:
                if not visited[i][j]:
                    if check_before(i, j, 1, array):
                        visited[i][j] = True
                    else:
                        flag = False
                        break
                else:
                    flag = False
                    break
            if abs(array[i][j] - array[i][j+1]) > 1:
                flag = False
                break
        if flag:
            answer += 1
check_row(array)
visited = [[False] * n for _ in range(n)]
# 90도 회전하기 시계방향으로
new_array = list(map(list, zip(*array[::-1])))

check_row(new_array)

print(answer)
728x90

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

[백준] 15486번: 퇴사 2  (0) 2023.01.14
[프로그래머스] 이모티콘 할인행사 Python  (0) 2023.01.13
[프로그래머스] 오픈채팅방 Python3 - Kakao 2019  (0) 2023.01.12
[백준] 15683번 : 감시  (0) 2023.01.11
[백준] 3184번: 양 Python - BFS풀이  (0) 2023.01.10
'Algorithm (PS)' 카테고리의 다른 글
  • [백준] 15486번: 퇴사 2
  • [프로그래머스] 이모티콘 할인행사 Python
  • [프로그래머스] 오픈채팅방 Python3 - Kakao 2019
  • [백준] 15683번 : 감시
minjiwoo
minjiwoo
Data 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

인기 글

태그

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

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[백준] 14890번 경사로 Python 구현문제
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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