[BOJ] 20125. 쿠키의 신체 측정

Jimeaning·2023년 12월 26일
0

코딩테스트

목록 보기
136/143

Python3

문제

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

키워드

  • 구현

문제 풀이

문제 요구사항

쿠키의 신체가 주어졌을 때 심장의 위치와 팔, 다리, 허리의 길이를 구하는 문제

  • 쿠키의 신체는 머리, 심장, 허리, 그리고 좌우 팔, 다리로 구성되어 있다.
  • 머리는 심장 바로 윗 칸에 1칸 크기로 있다.
  • 왼쪽 팔은 심장 바로 왼쪽에 붙어있고 왼쪽으로 뻗어 있으며, 오른쪽 팔은 심장 바로 오른쪽에 붙어있고 오른쪽으로 뻗어있다.
  • 허리는 심장의 바로 아래 쪽에 붙어있고 아래 쪽으로 뻗어 있다.
  • 왼쪽 다리는 허리의 왼쪽 아래에, 오른쪽 다리는 허리의 오른쪽 아래에 바로 붙어있고, 각 다리들은 전부 아래쪽으로 뻗어 있다.

변수 및 함수 설명

  • n : N은 판의 한 변의 길이를 의미하는 양의 정수
    (5 ≤ N ≤ 1,000)
  • cookie : 쿠키 신체 정보
  • head : 머리 찾는 flag
  • head_x, head_y : 머리가 위치한 행의 번호 x와 열의 번호 y
  • arm : 팔 길이
  • waist : 허리 길이
  • l_leg : 왼쪽 다리의 길이
  • r_leg : 오른쪽 다리의 길이

풀이

  • 쿠키 신체 정보를 입력받는다

(머리 찾기)

  • 쿠키 맵을 돌다가 별을 만나면 head flag를 1로 바꿔주고, 머리 위치의 x, y좌표를 저장한다
  • 심장은 머리 위치의 x + 1, y + 1이므로 해당 값을 출력한다
  • 머리를 찾았으니 반복문을 종료시킨다

(팔 길이 구하기)

  • 팔은 심장을 기준으로 왼팔, 오른팔이 있다
  • 심장을 만나기 전까지 arm 값을 하나씩 증가시키면서 왼팔을 구한다.
  • 심장 위치에 가면 왼팔 길이를 출력하고, 0으로 초기화시켜 오른팔을 계산할 준비를 한다
  • 다시 *을 만나면 arm 변수를 1씩 증가시켜 오른팔 길이도 구한다.

(허리 길이 구하기)

  • 허리는 심장 밑에 있으므로 반복문은 심장 x좌표부터 돌면 된다.
  • x좌표 값만 바꿔가면서 *을 찾아 값을 누적하면 된다

(다리 길이 구하기)

  • 다리가 시작하는 지점은 심장 위치에서 허리 길이를 더한 곳이므로 반복문을 심장 위치 + 허리 길이로 시작한다
  • 왼다리는 심장 y좌표 - 1에 있고, 오른다리는 심장 y좌표 + 1에 있다
  • x좌표 값만 바꿔가면서 *을 찾아 값을 누적하면 된다

최종 코드

n = int(input())

cookie = []
head = 0
arm = 0
waist = 0
l_leg = 0
r_leg = 0

for _ in range(n):
    cookie.append(list(map(str, input())))

for i in range(n):
    for j in range(n):
        if cookie[i][j] == "*":
            head = 1
            head_x = i+1
            head_y = j
            print(head_x + 1, head_y + 1) # 심장
            break
    if head:
        break

# 팔
for j in range(n):
    if j == head_y:
        print(arm, end=' ') # 왼팔
        arm = 0
        continue
    if cookie[head_x][j] == "*":
        arm += 1
print(arm, end=' ') # 오른팔

# 허리
for i in range(head_x + 1, n):
    if cookie[i][head_y] == "*":
        waist += 1
print(waist, end=' ')

# 다리
for i in range(head_x + waist + 1, n):
    if cookie[i][head_y-1] == "*":
        l_leg += 1
print(l_leg, end=' ')

for i in range(head_x + waist + 1, n):
    if cookie[i][head_y+1] == "*":
        r_leg += 1
print(r_leg, end=' ')

피드백

심장을 기준을 하나씩 구현하는 되는 문제

profile
I mean

0개의 댓글