본문 바로가기

Programming/ACMICPC

ACMICPC 12353 Baby Height(Small)

문제

모든 부모들은 자신의 아이가 얼마나 클 것인지 알고 싶어한다.

우주인 박사의 알고리즘을 사용하면 부모의 키만을 사용하여 아이가 얼마나 클 것인지 정확한 범위내로 알 수 있다.

엄마의 키와 아빠의 키를 더한다.

만약 아이가 딸이라면, 5인치를 뺀다.

만약 아이가 아들이라면, 5인치를 더해준다.

그리고 나온 수를 2로 나누어 준다.

이 값에 4인치를 더하거나 빼서 나온 값이 우주인 박사가 믿는 정확한 아이의 키의 범위이다.

부모가 자신의 아이의 미래 키를 물어본다면, 우주인 박사의 대답은 계산한 범위가 될 것이다. (매우 정확한 예측이다)

입력

첫번째 줄에 테스트 케이스의 갯수 T가 주어진다.

그 아래로 T라인동안 각 라인에는 아이의 성별(남자아이는 'B', 여자아이는 'G')과 엄마의 키, 아빠의 키가 차례로 주어지며, 

각 입력은 공백으로 구분되어 있다.

키의 입출력은 양수인 피트 후에 작은 따옴표('), 음수가 아닌 정수의 인치 후에 큰 따옴표(")로 나타낸다.


제한

  • 1 ≤ T ≤ 6000.
  • 피트 값은 1 과 9 사이의 숫자로 나타낸다.
  • 인치 값은 0 과 11 사이의 숫자로 나타낸다.

출력

각각의 테스트 케이스마다 출력을 다음과 같이 한 줄로 나타낸다. 

"Case #x: A to B"

x는 1부터 시작하는 케이스 번호를, A,B는 각각 우주인 박사의 알고리즘을 이용해 구한 아이 키의 최소 값, 최대 값을 나타낸다.

만약 알고리즘을 통해 계산한 값이 소수로 나타내어 지면 범위가 줄어들도록 

올림 또는 버림을 하여 인치 값을 1의자리까지 나타내어야 한다.


문제가 영어 원본밖에 없어서 번역을 해보긴 했는데 많이 어색하다...

문제 자체는 어려울 것이 없는 단순 계산문제이지만 확실히 짚고 넘어가야 할 것이 존재한다.

 만약 계산한 값이 소수점 아래 숫자를 포함한다면 범위를 나타낼때에 최소 값은 올림을, 최대 값은 버림을 해주어야 한다.

원본에는 'If the algorithm produces a range whose endpoints fall on fractional inches, 

your program should shrink the range until both endpoints can be expressed in whole inches.' 라고 적혀있다.

인치값이 정수로 표현이 안될경우 범위가 줄어드는 방향으로 버림 또는 올림하여 정수 값으로 표현하라는 거다.

코드에서는 offset 변수를 통해 이를 해결하였다. (계산하는 키 값이 홀수일때만 문제가 된다)


사실 문제가 어렵지는 않은데, 피트 인치 단위에 익숙하지 않고 위에서 짚고 넘어간 문제까지 겹쳐서 어디선가 꼬이면 왜

꼬였는지도 모른채 오답받기 쉽상이다. 혹시 오답을 받게 되면 피트, 인치 출력 범위를 벗어났나 한번 확인해 보아야 한다.

(인치 단위에 12이상의 숫자가 나온다던가...)

나도 한 번 꼬여서 4연속 오답처리나길래 짜증나서 다 지우고 처음부터 코드를 다시 짰더니 마법처럼 정답 처리가 되었다.

분명 전략은 똑같았는데... 어디서 틀린건지는 아직도 모른다.




'Programming > ACMICPC' 카테고리의 다른 글

ACMICPC 1017 소수 쌍  (0) 2017.08.22
ACMICPC 9999 구구  (0) 2017.03.01
ACMICPC 2851 슈퍼 마리오  (0) 2017.02.15
ACMICPC 2480 주사위 세개  (0) 2017.02.15
ACMICPC 2822 점수 계산  (0) 2017.02.15