728x90
https://www.acmicpc.net/problem/31462
24/05/14
업다운 랜디를 하다가 만난 문제로, 간단하게 그리디적 발상 + 살짝 귀찮은 구현을 요구하는 문제이다.
문제 접근 방식:
그림을 잘 관찰해보면, 빨간색 모양의 초콜릿은 뾰족한 부분이 위에 올라와있고, 파란색 모양의 초콜릿은 뾰족한 부분이 밑으로 내려와 있음을 확인할 수 있다.
따라서 위에서부터 아래로, 왼쪽에서부터 오른쪽으로 탐색을 진행할 때, 아직 발견하지 않은 빨간색 초콜릿을 발견한다면, 이는 빨간색 초콜릿의 뾰족한 부분이라고 결론 지을 수 있다.
마찬가지로, 똑같은 방법으로 탐색을 진행할 때 아직 발견하지 않은 파란색 초콜릿을 발견한다면, 이는 파란색 초콜릿의 평평한 부분이라고 결론 지을 수 있다.
따라서, 배열을 위와 같이 순서대로 순회하며 파란색 초콜릿과 빨간색 초콜릿을 발견하고, 발견한다면 이를 삼각형 모양으로 묶어 발견했다는 표시를 해주면 된다.
아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.
더보기
# 31462번 삼각 초콜릿 포장 (Sweet)
# 구현, 문자열
'''
접근 방법:
빨간 색의 예시
[0][0]
[1][0] [1][1]
[a][b]가 빨간색의 윗부분이면, [a+1][b]와 [a+1][b+1]도 빨간색이어야 한다.
방문한 곳은 0으로 바꿔주자.
'''
import sys
input = sys.stdin.readline
def solve():
N = int(input())
G = [list(input().rstrip()) for _ in range(N)]
try:
for i in range(N):
for j in range(i+1):
if G[i][j] == 'R':
if G[i+1][j] == G[i+1][j+1] and G[i+1][j] == 'R':
G[i][j], G[i+1][j], G[i+1][j+1] = 'O', 'O', 'O'
else:
print(0)
return
elif G[i][j] == 'B':
if G[i][j+1] == G[i+1][j+1] and G[i][j+1] == 'B':
G[i][j], G[i][j+1], G[i+1][j+1] = 'O', 'O', 'O'
else:
print(0)
return
else:
continue
except IndexError:
print(0)
return
print(1)
return
solve()
'알고리즘 > 백준 문제 풀이' 카테고리의 다른 글
[Python] 21772번 가희의 고구마 먹방 (2) | 2024.05.25 |
---|---|
[Python] 30959번 앙상블할래? (0) | 2024.05.24 |
[Python] 15681번 트리와 쿼리 (0) | 2024.05.22 |
[Python] 28422번 XOR 카드 게임 (0) | 2024.05.21 |
[Python] 28464번 Potato (0) | 2024.05.20 |