문제 링크
문제 요약
이 문제는 타이어 옆면에 표시된 정보를 분석하여 해당 타이어의 전체 둘레를 계산하는 문제입니다. 타이어 정보는 P 195 / 75 R 14
와 같은 형식으로 주어지며, 여기서 195
는 섹션 너비(mm), 75
는 섹션 높이/너비 비율(%), 14
는 공칭 림 지름(인치)을 나타냅니다.
주어진 정보를 바탕으로 다음을 계산해야 합니다:
- 섹션 높이 (Section Height):
(섹션 너비) * (비율) / 100
- 전체 지름 (Overall Diameter):
(공칭 림 지름) + 2 * (섹션 높이)
- 전체 둘레 (Overall Circumference):
π * (전체 지름)
모든 계산은 밀리미터 단위로 진행되며, 최종 둘레는 센티미터 단위로 변환 후 가장 가까운 정수로 반올림하여 출력해야 합니다. (1인치 = 2.54cm, 1cm = 10mm) 입력은 EOF(End Of File)로 종료됩니다.
풀이
이 문제는 주어진 타이어 정보를 파싱하여 요구되는 공식을 적용하는 구현 문제입니다.
-
입력 처리:
- 입력은 여러 줄로 주어지며 EOF로 종료됩니다.
try-except EOFError
구문을 사용하여EOFError
가 발생할 때까지input()
을 읽어들입니다. - 각 줄은 공백으로 구분된 문자열이므로,
s.split()
을 사용하여 각 요소를 리스트로 분리합니다.
- 입력은 여러 줄로 주어지며 EOF로 종료됩니다.
-
필수 정보 추출:
s.split()
으로 얻은 리스트에서section_width
는 두 번째 요소 (인덱스 1),ratio
는 네 번째 요소 (인덱스 3),nominal_rim_diameter
는 마지막 요소 (인덱스 -1)에 해당합니다. 이 값들을 정수로 변환합니다.
-
단위 변환:
nominal_rim_diameter
는 인치 단위로 주어지므로, 이를 밀리미터 단위로 변환해야 합니다. 1인치는 2.54cm이고 1cm는 10mm이므로, 1인치는 25.4mm입니다. 따라서nominal_rim_diameter * 25.4
를 계산합니다.
-
계산 단계:
- 섹션 높이 (Section Height):
section_width * ratio / 100
공식을 사용하여 밀리미터 단위의 섹션 높이를 계산합니다. - 전체 지름 (Overall Diameter): 변환된
nominal_rim_diameter
에2 * section_height
를 더하여 전체 지름을 계산합니다. 이 또한 밀리미터 단위입니다. - 전체 둘레 (Overall Circumference):
math.pi * overall_diameter
공식을 사용하여 전체 둘레를 계산합니다. 결과는 밀리미터 단위입니다.
- 섹션 높이 (Section Height):
-
결과 출력:
- 계산된 전체 둘레(밀리미터)를 10으로 나누어 센티미터 단위로 변환합니다.
- Python의
round()
함수를 사용하여 변환된 둘레 값을 가장 가까운 정수로 반올림합니다. - 문제에서 요구하는 출력 형식(
{원래 입력 문자열}: {반올림된 둘레 값}
)에 맞춰 결과를 출력합니다.
이 과정들을 각 입력 줄마다 반복하여 문제를 해결합니다.
정답 코드
def solve():
while 1:
try:
s = input()
except EOFError:
break
l = s.split()
section_width = int(l[1])
ratio = int(l[3])
nominal_rim_diameter = int(l[-1]) * 25.4 # 인치를 밀리미터로 변환 (1 inch = 2.54 cm = 25.4 mm)
section_height = section_width * ratio / 100 # 밀리미터 단위
overall_diameter = nominal_rim_diameter + 2 * section_height # 밀리미터 단위
radius = overall_diameter / 2 # 밀리미터 단위
# 전체 둘레 (밀리미터 단위)
# 2 * pi * radius = pi * overall_diameter
circumference_mm = pi * overall_diameter
# 센티미터로 변환 후 반올림
ans = round(circumference_mm / 10)
print(f"{s}: {ans}")
if __name__ == "__main__":
tc = 1
for t in range(1, tc+1):
ret = solve()