dalgorithm
달공의 개발기
dalgorithm
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • Back-end (0)
    • Java (11)
    • 자료구조 (7)
    • Network (31)
    • Database (9)
    • Baekjoon Online (24)
    • 클라우드 (6)
    • Android (15)
      • Kotlin (14)
    • AI (27)
      • Machine Learning&Deep Learn.. (27)
    • Web (23)
      • Webhacking (17)
      • WebProgramming (6)
    • 기술면접 (1)
      • JAVA&자료구조 (0)
      • Spring (0)
      • 컴퓨터구조&운영체제 (0)
      • 네트워크 (0)
      • 데이터베이스 (0)
    • CTF 스터디 (15)
    • 대외활동 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • kotlin
  • Guacamole
  • 침입탐지
  • 웹해킹
  • CTF
  • 클라우드
  • 딥러닝
  • 자료구조
  • 인공지능
  • 코드리뷰
  • 네트워크
  • cs
  • java
  • 데이터베이스
  • db
  • gcp
  • 포너블
  • 머신러닝
  • 자바
  • python #백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dalgorithm

달공의 개발기

[python] 백준 1652번_누울 자리를 찾아라
Baekjoon Online

[python] 백준 1652번_누울 자리를 찾아라

2021. 1. 11. 17:00
728x90

출처: www.acmicpc.net/problem/1652

1652번: 누울 자리를 찾아라

첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다.

www.acmicpc.net

누울 자리를 찾아라 성공분류

시간 제한메모리 제한제출정답맞은 사람정답 비율
2 초128 MB102304029335940.715%

문제

일 년 동안 세계일주를 하던 영식이는 여행을 하다 너무 피곤해서 근처에 있는 코레스코 콘도에서 하룻밤 잠을 자기로 하고 방을 잡았다.

코레스코 콘도에 있는 방은 NxN의 정사각형모양으로 생겼다. 방 안에는 옮길 수 없는 짐들이 이것저것 많이 있어서 영식이의 누울 자리를 차지하고 있었다. 영식이는 이 열악한 환경에서 누울 수 있는 자리를 찾아야 한다. 영식이가 누울 수 있는 자리에는 조건이 있다. 똑바로 연속해서 2칸 이상의 빈 칸이 존재하면 그 곳에 몸을 양 옆으로 쭉 뻗으면서 누울 수 있다. 가로로 누울 수도 있고 세로로 누울 수도 있다. 누울 때는 무조건 몸을 쭉 뻗기 때문에 반드시 벽이나 짐에 닿게 된다. (중간에 어정쩡하게 눕는 경우가 없다.)

 

 

만약 방의 구조가 위의 그림처럼 생겼다면, 가로로 누울 수 있는 자리는 5개이고, 세로로 누울 수 있는 자리는 4개 이다. 방의 크기 N과 방의 구조가 주어졌을 때, 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다.

출력

첫째 줄에 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 개수를 출력한다.

예제 입력 1

5

....X

..XX.

.....

.XX..

X....

예제 출력 1

5 4


문제를 보면 사람이 방 안에서 자야하는 상황이고, 방 크기는 NXN의 정사각형 모양으로 생겼다. 사람이 누울 자리를 찾아야 하는데 연속해서 2칸이상의 빈 칸이 존재하는 곳에 누울 수 있다. 사람은 방에 가로로 누울 수 있고, 세로로도 누울 수 있다.

중간에 물건이 있는 경우나 벽에 닿게 되어 2칸 미만이 되는 경우는 포함하지 않는다.

 

위의 예시를 보면 검정색으로 칠해진 면적이 물건이 있는 부분이다. 따라서 그 부분을 제외하고 2칸 이상이 연속된 공간들을 찾아내야한다. 첫번째 행을보면 끝에만 검정색으로 칠해져있고 그 전에는 4개의 연속된 공간이 있다. 이 경우 가로로 누울 수 있는 공간이 1개 있는 것이다. 그 다음 행을 보면 3, 4번째 칸이 검정색으로 칠해져있다. 이 경우에는 잘 수 있는 공간이 있는가? 그렇다. 1, 2번째 칸이 비어 있으므로 가로로 누울 수 있는 공간이 하나 더 늘어난 것이다. 이런 식으로 계산해보면 예제 출력 결과와 같이 가로로 누울 수 있는 자리는 총 5개고 세로도 이와 같이 계산하여 총 4개가 나온다.

 

 

위에서 문제에 대해 이해한 방향과 같게 소스코드를 작성하니 비교적 쉽게 해결되었다.

가로로 누울 수 있는 자리보다 세로로 누울 수 있는 자리를 계산하는 것이 개인적으로 더 어려웠다고 느꼈다.

처음에는 아래 코드를 Run을 해주었더니 다음과 같은 오류가 나타났다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
N=int(input())
setting=[]
row=0 #행
col=0 #열
cnt_w=0
cnt_h=0
 
for i in range(N):
    setting.append(input())
for i in setting:
    for j in i:
        if j=='.':
            row+=1
        else:
            if row>=2:
                cnt_w+=1
            row=0
    if row>1:
        cnt_w+=1
    row=0
for i in range(N):
      for j in range(N):
        if setting[j][i] == '.':
            col += 1
        else:
            if col > 1:
                cnt_h += 1
            col = 0
    if col>1:
        cnt_h += 1
    col = 0
print(cnt_w, cnt_h) 
cs

 

 

 

 

Indentation Error는 들여쓰기 오류이다. 파이썬에는 들여쓰기가 굉장히 중요한데 중첩적인 for문이나 if문을 쓸 때, 특히나 주의해주어야 한다. 소스코드의 29번째 줄에서 오류가 발생한것을 확인할 수 있었다. 확인 후, 코드를 수정해주었다.

미세한 차이이지만 수정해줌으로써 문제없이 실행되었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
N=int(input())
setting=[]
row=0 #행
col=0 #열
cnt_w=0
cnt_h=0
 
for i in range(N):
    setting.append(input())
for i in setting:
    for j in i:
        if j=='.':
            row+=1
        else:
            if row>=2:
                cnt_w+=1
            row=0
    if row>1:
        cnt_w+=1
    row=0
for i in range(N):
    for j in range(N):
        if setting[j][i] == '.':
            col += 1
        else:
            if col > 1:
                cnt_h += 1
            col = 0
    if col>1:
        cnt_h += 1
    col = 0
print(cnt_w, cnt_h) 
cs

 

파이썬 문법 Error에 좀 더 민감하게 반응해야겠다고 느낄 수 있었던 실습이었다.

728x90

'Baekjoon Online' 카테고리의 다른 글

[python] 백준 2941번_크로아티아 알파벳  (0) 2021.01.13
[C++] 백준 2839번_설탕 배달  (0) 2021.01.12
[python] 백준 1019번_책 페이지  (0) 2021.01.10
[python] 백준 1935번_후위 표기식2  (0) 2021.01.09
[C] 백준 2562번_최댓값  (0) 2021.01.08
    'Baekjoon Online' 카테고리의 다른 글
    • [python] 백준 2941번_크로아티아 알파벳
    • [C++] 백준 2839번_설탕 배달
    • [python] 백준 1019번_책 페이지
    • [python] 백준 1935번_후위 표기식2
    dalgorithm
    dalgorithm

    티스토리툴바