[Python] 백준 20125번 - 쿠키의 신체 측정

유빈·2025년 1월 12일
0

Algorithms

목록 보기
24/35
post-thumbnail

백준 문제집 PS

ses0028님의 "IT기업 및 대기업 계열사 코테보면서 비슷했던 문제들(지속적으로 업데이트 중)"

이번 방학 2달동안 골드 3 (81문제)까지 다 푸는 것이 목표입니다.

25.01.12 - 실버 4 1문제
(16/81문제)

문제문제 제목문제 티어문제 링크풀이 링크
20125쿠키의 신체 측정실버 4https://www.acmicpc.net/problem/20125🔗


🔗 문제 링크

백준 20125번: 쿠키의 신체 측정


⏰ 소요된 시간

20분



🛡️ 난이도

실버 4



✨ 수도 코드

1. 문제 이해


2. 코드 분석

input = open(0).readline

part = 0
waist = 0
left_arm, right_arm = 0, 0
left_leg, right_leg = 0, 0
for n in range(N := int(input())):
    row = list(input().rstrip())
    if "*" in row:
        if part == 0:  # 머리
            part += 1
            head_idx = row.index('*')  # 머리의 열 위치 저장
            print(n+2, head_idx+1)  # 심장의 행, 열 위치 출력
        elif part == 1:  # 팔, 심장
            part += 1
            left_arm = head_idx - row.index('*')
            right_arm = row.index('*') + row.count('*') - head_idx - 1
        elif part == 2 and row.count('*') == 1:  # 허리
            waist += 1
        elif part == 2 and row.count('*') != 1:
            part += 1

        if part == 3 and row.count('*') == 2:  # 다리
            left_leg += 1
            right_leg += 1
        elif part == 3 and row.count('*') == 1:
            if row.index('*') == head_idx - 1:
                left_leg += 1
            else:
                right_leg += 1

print(left_arm, right_arm, waist, left_leg, right_leg)

변수 정리

part: 신체 구분

  • 0: 머리
  • 1: 왼팔, 심장, 오른팔
  • 2: 허리
  • 3: 다리

waist: 허리 길이
left_arm, right_arm: 왼팔, 오른팔 길이
left_leg, right_leg: 왼다리, 오른다리 길이
N: N x N 행렬의 크기
head_idx: 머리의 열 위치 인덱스


head_idx = row.index('*')  # 머리의 열 위치 저장
print(n+2, head_idx+1)  # 심장의 행, 열 위치 출력

심장의 행, 열 위치는 머리의 행+1, 열 위치와 동일하다. 그래서 part가 1인 즉, 머리 부분에서 따로 심장의 위치를 저장할 필요없이 위와 같이 심장의 위치를 출력할 수 있다.



참고로 코드를 작성하면서 순간 헷갈렸던 점에 대해서 알아보자.

# 1
row = list(input().rstrip().split())
# 2
row = list(input().rstrip())

# 입력 "__*__"

# 출력 1
["__*__"]

# 출력 2
['_', '_', '*', '_', '_']

split()은 공백을 기준으로 문자열을 자르는 함수이다.

위의 입력에서는 공백이 없는 문자열이므로 1번의 코드로 작성하면 각 문자열이 하나로 저장된다. 주의하자.



profile
🌱

0개의 댓글