본문 바로가기

알고리즘

BOJ 11834 홀짝

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)

'알고리즘' 카테고리의 다른 글

2019 KAKAO 코딩테스트 후보키  (0) 2021.09.08
2019 KAKAO 코딩테스트 무지의 먹방 라이브  (0) 2021.09.07
BOJ 14391 종이조각  (0) 2021.08.23
BOJ 2013 선그리기  (0) 2021.05.05
BOJ 14226 이모티콘  (0) 2021.05.01