Question
Consider integer numbers from 0
to n - 1
written down along the circle in such a way that the distance between any two neighboring numbers is equal (note that 0
and n - 1
are neighboring, too).
Given n
and firstNumber
, find the number which is written in the radially opposite position to firstNumber
.
Example
For
n = 10
andfirstNumber = 2
, the output should becircleOfNumbers(n, firstNumber) = 7
Input/Output
[execution time limit] 4 seconds (py3)
[input] integer n
A positive even integer.
Guaranteed constraints:
4 ≤ n ≤ 20
.[input] integer firstNumber
Guaranteed constraints:
0 ≤ firstNumber ≤ n - 1
.[output] integer
MY_ANSWER
def circleOfNumbers(n, firstNumber):
if n <= firstNumber*2:
return firstNumber - n//2
else:
return firstNumber + n//2
n개의 점을 이용하여 원을 만들 때, firstNumber 반대편의 점을 반환하는 문제.
예를 들어 firstNumber가 2일 때 반대편의 숫자는 7이다.
- firstNumber에서 반대편의 숫자를 return 값으로 받아야하기 때문에 n에서 절반을 나눈 만큼 이동하면 반대편 값에 도달하게된다.
- 그러나 firstNumber가 n의 절반값보다 크면 n에서 절반을 나눈만큼 정방향으로 이동하는 것이 아니라 역방향으로 이동해야 할 것 이다. 가령 firstNumber가 8인경우 반대값은 3이다.
Best_ANSWER
def circleOfNumbers(n, firstNumber):
return (firstNumber + n//2)%n
- firstNumber + n//2, firstNumber의 반대값을 찾기위해 n의 절반값만큼 이동하는 아이디어는 동일
- firstNumber + n//2가 n보다 클 경우 %(나머지 값) 기호를 이용해 한바퀴 순회하는 형식으로 구현(My_answer처럼 조건문을 사용하지 않았다.)