반응형
14397번: 해변
단위 정육각형 이루어져 있는 지도가 주어졌을 때, 해변의 길이를 구하는 프로그램을 작성하시오. 해변은 정육각형의 변 중에서 한 쪽은 물인데, 한 쪽은 땅인 곳을 의미한다.
www.acmicpc.net
난이도 치고 제출이 적은 것 같아 궁금해서 풀어본 문제 , 어렵진 않았지만 조금 귀찮은 방법으로 풀었었다.
풀이
- 한줄씩 입력받은 지형을 2차원 배열에 저장한다.
- 육지와 바다 타일이 육각형 이므로 홀수줄과 짝수줄을 분리하여 위 , 아래 , 좌우의 해변 수를 센다.
- 연산 방향이 왼쪽에서 오른쪽 , 위에서 아래 이므로 중복되지 않도록 연산방향에 해당되는 해변 수만 체크한다.
import sys
count = int(0)
n , m = map(int , sys.stdin.readline().split())
stack = []
for i in range(0,n):
a = list(map(str , sys.stdin.readline()))
a.pop()
stack.append(a)
for i in range(0,n):
for t in range(0,m-1):
if (stack[i][t] == "." and stack[i][t+1] == "#") or (stack[i][t] == "#" and stack[i][t+1] == "."):
count += 1
for i in range(0,n-1):
if i%2 == 0:
if (stack[i][0] == "." and stack[i+1][0] == "#") or (stack[i][0] == "#" and stack[i+1][0] == "."):
count += 1
for t in range(1,m):
if (stack[i][t] == "." and stack[i+1][t] == '#') or (stack[i][t] == "#" and stack[i+1][t] == '.'):
count += 1
if (stack[i][t] == "." and stack[i+1][t-1] == '#') or (stack[i][t] == "#" and stack[i+1][t-1] == '.'):
count += 1
else:
for t in range(0,m-1):
if (stack[i][t] == "." and stack[i+1][t] == '#') or (stack[i][t] == "#" and stack[i+1][t] == '.'):
count += 1
if (stack[i][t] == "." and stack[i+1][t+1] == '#') or (stack[i][t] == "#" and stack[i+1][t+1] == '.'):
count += 1
if (stack[i][m-1] == "." and stack[i+1][m-1] =="#") or (stack[i][m-1] == "#" and stack[i+1][m-1] =="."):
count += 1
print(count)
비슷한 문제
알고리즘 - Python / 백준 - 2115번 : 갤러리 (tistory.com)
알고리즘 - Python / 백준 - 2115번 : 갤러리
2115번: 갤러리 (acmicpc.net) 2115번: 갤러리 첫째 줄에 갤러리의 세로 길이 M과 가로 길이 N이 주어진다. (1<=M, N<=1,000) 다음 M개의 줄에는 각각 N개의 문자가 주어진다. 문자는 'X' 또는 '.'이며 'X'는 벽을
ddggblog.tistory.com
반응형
'코딩 > 백준' 카테고리의 다른 글
알고리즘 - Python / 백준 - 9461번 : 파도반 수열 (0) | 2021.08.14 |
---|---|
알고리즘 - Python / 백준 - 2579번 : 계단 오르기 (0) | 2021.08.14 |
알고리즘 - Python / 백준 - 6603번 : 로또 (0) | 2021.08.14 |
알고리즘 - Python / 백준 - 1463번 : 1로 만들기 (0) | 2021.08.14 |
알고리즘 - Python / 백준 - 5430번 : AC (0) | 2021.08.14 |