일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 페이코 추천인
- C언어
- 플러터 개발환경 설정
- 최단 경로
- Java
- 페이코 추천인코드
- 플러터
- 자바
- 자바 스프링
- 스프링
- C
- php 프로그래밍 입문 예제
- php 프로그래밍 입문
- php 프로그래밍
- JAVA SPRING
- Flutter
- programmers
- 페이코 친구코드
- php
- 파이썬
- php 프로그래밍 입문 연습문제
- php 프로그래밍 입문 문제풀이
- 배열
- 백준
- php 프로그래밍 입문 솔루션
- 페이코 초대코드
- php 프로그래밍 입문 3판
- SWEA
- spring
- 한정 분기
- Today
- Total
ImJay
[파이썬/Python] 백준 1652번 누울 자리를 찾아라 본문
[파이썬/Python] 백준 1652번 누울 자리를 찾아라
문제
일 년 동안 세계일주를 하던 영식이는 여행을 하다 너무 피곤해서 근처에 있는 코레스코 콘도에서 하룻밤 잠을 자기로 하고 방을 잡았다.
코레스코 콘도에 있는 방은 NxN의 정사각형모양으로 생겼다. 방 안에는 옮길 수 없는 짐들이 이것저것 많이 있어서 영식이의 누울 자리를 차지하고 있었다. 영식이는 이 열악한 환경에서 누울 수 있는 자리를 찾아야 한다. 영식이가 누울 수 있는 자리에는 조건이 있다. 똑바로 연속해서 2칸 이상의 빈 칸이 존재하면 그 곳에 몸을 양 옆으로 쭉 뻗으면서 누울 수 있다. 가로로 누울 수도 있고 세로로 누울 수도 있다. 누울 때는 무조건 몸을 쭉 뻗기 때문에 반드시 벽이나 짐에 닿게 된다. (중간에 어정쩡하게 눕는 경우가 없다.)
만약 방의 구조가 위의 그림처럼 생겼다면, 가로로 누울 수 있는 자리는 5개이고, 세로로 누울 수 있는 자리는 4개 이다. 방의 크기 N과 방의 구조가 주어졌을 때, 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 수를 구하는 프로그램을 작성하시오.
해설
문제를 이해하는데 애를 먹을 수 밖에 없었다. 왜 예시 그림에서 가로는 5자리, 세로는 4자리 밖에 안나올까?
그림과 같이 칸이 몇개가 남든 연속적으로 남는다면 자리수는 한자리로 취급된다.
만약 ..X.. 와 같이 두칸이 벽 하나를 두고 있다면 두자리로 취급된다.
문제 해석이 된다면 쉽게 문제를 풀 수 있다.
코드
def findRow(list):
count = 0
rowCount = 0
for char in list:
if char in '.':
count += 1
else:
count = 0
if count == 2:
rowCount += 1
return rowCount
def findCol(list):
colCount = 0
for i in range(len(list)):
count = 0
for j in range(len(list)):
if list[j][i] == '.':
count += 1
else:
count = 0
if count == 2:
colCount += 1
return colCount
list = []
rowCount, colCount = 0, 0
for N in range(int(input())):
list.append(list(input()))
rowCount += findRow(list[N])
colCount += findCol(list)
print(rowCount, colCount)
풀이
def findRow(list):
count = 0
rowCount = 0
for char in list:
if char in '.':
count += 1
else:
count = 0
if count == 2:
rowCount += 1
return rowCount
1. 가로 자리를 찾는 함수이다.
'.'의 갯수를 count에 저장시키면서 'X'를 만나게 되면 count를 초기화한다.
count가 2가 되면 rowCount(가로 자리)를 1 증가 시킨다.
def findCol(list):
colCount = 0
for i in range(len(list)):
count = 0
for j in range(len(list)):
if list[j][i] == '.':
count += 1
else:
count = 0
if count == 2:
colCount += 1
return colCount
2. 세로 자리를 찾는 함수이다.
'.'의 갯수를 count에 저장시키면서 'X'를 만나게 되면 count를 초기화한다.
count가 2가 되면 colCount(세로 자리)를 1 증가 시킨다.
list = []
rowCount, colCount = 0, 0
for N in range(int(input())):
list.append(list(input()))
rowCount += findRow(list[N])
colCount += findCol(list)
print(rowCount, colCount)
3. N만큼 반복하여 한줄씩 입력받아 리스트에 저장한다.
가로자리는 한줄씩 보내도 찾을 수 있기 때문에 바로 보내고, 세로자리는 리스트를 통으로 보낸다.
피드백
문제를 이해할 수가 없어서 처음에 서치를 했다..
많은 문제를 풀어보며 문제 유형에 익숙해질 필요가 있는 것 같다.
'백준 - 문제집 > 대학생 기본반' 카테고리의 다른 글
[파이썬/Python] 백준 8979번 올림픽 (0) | 2023.01.16 |
---|---|
[파이썬/Python] 백준 2816번 디지털 티비 (0) | 2023.01.16 |
[파이썬/Python] 백준 2621번 카드게임 (0) | 2023.01.09 |
[파이썬/Python] 백준 1747번 소수&팰린드롬 (0) | 2022.12.21 |
[파이썬/Python] 백준 대학생 기본반 (0) | 2022.12.21 |