전체 방문자
오늘
어제
이대코
ServerNeverDown
이대코
  • 분류 전체보기 (110)
    • Project (9)
      • GASIP_대학 커뮤니티 (5)
      • CATCHROOM_야놀자중고숙박거래 (2)
      • CANCER-FINE_암환자를 위한 정보 제공 사.. (2)
    • Development (46)
      • Python (9)
      • Java (8)
      • Kotlin (1)
      • Spring&Springboot (4)
      • BootCamp (10)
      • DevOps (1)
      • TrobleShooting (6)
      • Network (1)
      • DataBase (2)
      • OS (1)
      • Design Pattern (2)
    • Coding Test (52)
      • BOJ (1)
      • DFS,BFS (4)
      • 그리디 알고리즘 (6)
      • Dynamic Programming (2)
      • 이진 탐색 (0)
      • 초보자를 위한 파이썬 300제 (29)
      • 구현 (10)
    • Stock (3)
      • Market View (2)
      • Analysis of stocks (0)
      • Knowledge (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

인기 글

hELLO · Designed By 정상우.
이대코

ServerNeverDown

[DFS 알고리즘] 1388번 바닥장식 풀이(파이썬)
Coding Test/DFS,BFS

[DFS 알고리즘] 1388번 바닥장식 풀이(파이썬)

2023. 2. 1. 13:43

안녕하세요. Harry입니다.

 

본 포스팅의 목적은, 코딩테스트를 준비함에 있어 백준에 제시된 문제 풀이와 스스로 얻은 정보를 정리하고자 합니다.

그러므로 단순히 문제를 푸는 것이 중요한 것이 아니라, 문제를 통해 얻어가는 것이 있어야하기 때문에 접근 방식은 이전 기초 300제를 풀었을 때랑 동일합니다.

 

[접근 방식]

- 문제에서 요구하는 역량은 무엇인지?

- 알고 있어야하는 지식은 무엇인지? 에 기반하여 풀이하고자 합니다.

 

- 백준 문제 링크입니다. : https://www.acmicpc.net/problem/1388

 

1388번: 바닥 장식

형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나

www.acmicpc.net

아래 작성된 답안은 제가 직접 작성 후 백준 페이지에서 채점하여 정답으로 인정된 답안입니다.
공식 답안이 아니므로 최적의 해가 아닐 수 있으며, 답안은 다른 분들과 상이할 수 있습니다.

 

[풀이]

def dfs(x,y):
    if x < 0 or x >= n or y < 0 or y >= m:
        return
    if graph[x][y] == '-':
        graph[x][y] = 1
        dfs(x,y+1)
        dfs(x,y-1)
        return True
    return False

def long(x,y):
    if x < 0 or x >= n or y < 0 or y >= m:
        return
    if graph[x][y] == '|':
        graph[x][y] = 1
        long(x+1,y)
        long(x-1,y)
        return True
    return False

n,m = map(int,input().split())
graph = [ list(input()) for i in range(n) ]
count = 0

for i in range(n):
    for j in range(m):
        if dfs(i,j) == True:
            count += 1
        if long(i,j) == True:
            count += 1
print(count)

이 문제는 가로 작대기(-) 와 세로 작대기(|)를 각각 구분하는 함수를 구성하여 해결했습니다.

1. 가로 작대기 개수 확인(dfs함수)

dfs 함수의 경우,

입력된 전체 바닥 범위(n x m) 를 벗어난 x,y값은 제외.

오직 행 별로 인접한 '-' 표시를 1로 변경하여 방문 표시를 남기고, 좌우에 인접한 '-' 표시가 있는지 확인하여 있으면 재귀함수로 호출.

좌우에 인접한 '-' 표시가 없는 경우 최종적으로 True를 출력.

 

2. 세로 작대기 개수 확인(long함수)

long 함수의 경우,(dfs 함수와 기본 로직은 동일)

입력된 전체 바닥 범위(n x m) 를 벗어난 x,y값은 제외.

오직 행 별로 인접한 '|' 표시를 1로 변경하여 방문 표시를 남기고, 상하에 인접한 '|' 표시가 있는지 확인하여 있으면 재귀함수로 호출.

좌우에 인접한 '|' 표시가 없는 경우 최종적으로 True를 출력.

 

3. 2중 for문으로 바닥 범위 내 모든 좌표를 하나씩 조사하여 True 값이 총 몇번 나왔는지 확인

 

감사합니다.

저작자표시 비영리 변경금지 (새창열림)

'Coding Test > DFS,BFS' 카테고리의 다른 글

[[Algorithm] ] BFS 알고리즘 기본 함수 작성 방법 (파이썬)  (0) 2023.02.14
[Algorithm] DFS 알고리즘(깊이 우선 탐색) 코딩테스트 문제 유형 분석(파이썬)  (0) 2023.02.06
[Algorithm] DFS 알고리즘(깊이 우선 탐색)&BFS 알고리즘(너비 우선 탐색)이란?  (2) 2022.12.30
    'Coding Test/DFS,BFS' 카테고리의 다른 글
    • [[Algorithm] ] BFS 알고리즘 기본 함수 작성 방법 (파이썬)
    • [Algorithm] DFS 알고리즘(깊이 우선 탐색) 코딩테스트 문제 유형 분석(파이썬)
    • [Algorithm] DFS 알고리즘(깊이 우선 탐색)&BFS 알고리즘(너비 우선 탐색)이란?
    이대코
    이대코
    20대에 대장암 걸린 코틀린/자바 백엔드 개발자의 블로그입니다.

    티스토리툴바