알고리즘
BOJ 11834 홀짝
굽굿
2021. 8. 27. 00:16
https://www.acmicpc.net/problem/11834
11834번: 홀짝
홀짝 수열은 1,2,4,5,7,9,10,12,14,16,17로 시작하는 증가하는 자연수 수열이다. 홀짝 수열은 1개의 홀수, 2개의 짝수, 3개의 홀수 이런식으로 이어진다. 이 수열의 N번째 원소를 출력한다.
www.acmicpc.net
n번째 수가 몇번 째 그룹(몇번째 홀수 그룹, 몇번째 짝수 그룹)에 속하는지 구한다면 풀 수 있는 문제이다.
나는 다음과 같은 식을 세워서 풀었다
$$ \frac{i^2 + i}{2} < n <= \frac{i^2+3*i+2}{2} $$
sqrt함수는 정밀도 때문에 사용하지 못해, 이진탐색을 이용해 i를 찾아 풀었다.
또한 100자리 수가 필요했기 때문에 big integer를 언어 차원에서 지원하는 python을 이용하여 풀었다.
a = int(input())
answer = 1
x = 10**100
y = 0
while x > y:
b = (x+y) // 2
if b*b + b >= 2*a:
x = b - 1
elif b*b + 3*b + 2 < 2*a:
y = b + 1
else:
x = b
break
x += 1
answer = 2*a - x
print(answer)