2014년 7월 7일 월요일

1614 영식이의 손가락

손가락으로 숫자를 셀때, n번째 손가락에 셀 수 있는 갯수가 제한(m)되 있는 경우,최대 몇개까지 셀 수 있는가를 묻는 문제이다.
경우의 수를 제대로 생각하지 못해서 여러번 틀렸다.

내가 생각한 기본적인 알고리즘은
m+1번 까지 완주 했을때의 갯수에서 더 나아간 횟수를 빼주는 방식이다.
이때 생각해야 할 것은, n이 엄지나 새끼 손가락일 경우 와 그렇지 않을 경우의 처리 방식이 다르다는 것이다.
다른 손가락은 왔다갔다 할때 횟수가 2번 감소하지만, 엄지와 새끼는 1번 감소한다.
따라서 다른손가락보다 2배 더 갈 수 있다.
즉, 엄지와 새끼일 경우 m=m*2.

m번 완주 했을때 셀 수 있는 수는
p(m) = 1 + 4*m

m+1번 완주 했을때, 원래 멈춰야 될 위치에서 더 나아간 횟수는
m이 짝수일 경우 (손가락의 번호가 점점 증가) 6-n,
m이 홀수일 경우 (손가락의 번호가 점점 감소) n 이다.
즉,
q(n,m) = m%2?n:6-n

우리가 구하려는 답은
f(n,m) = p(m+1) - q(n,m)
이 된다.

ps1. 여기서 엄지와 새끼일 경우는 m이 무조건 짝수가 됨을 알 수 있다..
ps2. 조건에서 m의 범위로 인해 int 형은 오버플로우가 발생 할 수 있음에도 유의하자.
ps3. 이렇게 풀어서 써도 역시 이해하기 어렵다..

소스

댓글 없음:

댓글 쓰기