본문 바로가기

카테고리 없음

파이썬) 쿠키의 신체 측정 - BOJ

 

https://www.acmicpc.net/problem/20125

n = int(input())

head = []

heart = []

left_arm = 0

right_arm = 0

mid = 0

left_leg = 0
right_leg = 0

for i in range(n):
    string = input()

    for j in range(len(string)):
        if string[j] == '*':
            if head == []:
                # 헤드를 발견하지 못햇다면
                # 맨처음 *은 무조건 헤드임
                head = [i, j]
            else:
                if heart == []:
                    # 하트가 비엇다면 왼쪽팔이나 하트라는 뜻
                    if head[1] == j:
                        # 헤드 바로 아래, 즉 하트라면 하트 위치 저장
                        heart = [i, j]
                    else:
                        # 하트가 비어잇고 머리 바로 아래가 아니라면, 즉 왼쪽 팔이라는 뜻
                        left_arm += 1
                else:
                    # 하트가 비어잇지 않다면
                    #  여기 부터는 오른쪽 팔, 허리, 다리가 될수가 잇다
                    if i == heart[0]:
                        # 가로로 하트와 일직선상이라면, 즉 오른쪽 팔이라면
                        right_arm += 1

                    else:
                        # 하트가 차있고, 하트와 가로로 일직선상이 아니라면
                        if j == heart[1]:
                            # 만약 하트와 세로로 일직선상이라면
                            mid += 1
                        else:
                            # 여기서부턴 왼다리 또는 오른다리 둘중 하나이다
                            if heart[1] > j:
                                # 하트와 세로로 일직선상에서 왼쪽에서 있다면 왼쪽다리이다
                                left_leg += 1
                            else:
                                right_leg += 1

print(heart[0]+1, heart[1]+1)
print(f'{left_arm} {right_arm} {mid} {left_leg} {right_leg}')

사실 이 문제는 BFS로도 풀 수가 있지만 더 간단하게 구현으로도 충분히 풀 수가 있다.

우선 여러 조건문들이 있지만 반복문을 돌며 가장 먼저 마주치는 순서대로 나열하자면 

머리, 왼쪽팔, 심장, 오른쪽 팔, 허리, 왼쪽 다리, 오른쪽 다리이다.

그 순서대로 조건문을 짜 넣으면 아무런 문제없이 통과할 수 있는 문제였다.

그러나 너무나 많은 조건문 때문에 어디서부터 무엇을 체크하는지 헷갈릴 수 있으니 주석을 잘 달 수 있도록 주의해야한다.