
백준 문제집 PS
ses0028님의 "IT기업 및 대기업 계열사 코테보면서 비슷했던 문제들(지속적으로 업데이트 중)"
이번 방학 2달동안 골드 3 (81문제)까지 다 푸는 것이 목표입니다.
25.01.12 - 실버 4 1문제
⛳ (16/81문제)
문제 문제 제목 문제 티어 문제 링크 풀이 링크 20125 쿠키의 신체 측정 실버 4 https://www.acmicpc.net/problem/20125 🔗

20분
실버 4


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: 신체 구분
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번의 코드로 작성하면 각 문자열이 하나로 저장된다. 주의하자.