두 개의 음이 아닌 정수 left와 right가 주어졌을 때, left부터 right까지(양쪽 경계값 포함) 범위 안에 있는 홀수의 개수를 구하는 문제입니다.
문제 이해하기
예를 들어 left = 3, right = 15라고 입력하면 출력은 7이 됩니다. 해당 구간의 홀수는 [3, 5, 7, 9, 11, 13, 15]로 총 7개이기 때문입니다.
풀이 접근 방법
모든 숫자를 하나씩 확인하는 대신, 수학적 성질을 이용하면 반복문 없이 한 번의 연산으로 답을 구할 수 있습니다.
- left 또는 right 중 하나라도 홀수라면 →
(right - left) // 2 + 1반환 - 둘 다 짝수라면 →
(right - left) // 2반환
동작 원리: 두 수의 차이(right - left)를 2로 나눈 몫은 구간 내 홀수 개수의 기본값이 됩니다. 경계값 중 하나라도 홀수가 포함되어 있다면 그 값 하나를 추가로 더해주는 것입니다. 이 방식은 시간 복잡도 O(1)로 매우 효율적입니다.
파이썬 구현 예제
아래 코드를 통해 직접 확인해 보세요.
def solve(left, right):
if left % 2 == 1 or right % 2 == 1:
return (right - left) // 2 + 1
else:
return (right - left) // 2
left = 3
right = 15
print(solve(left, right))입력
3, 15
출력
7
마무리
이처럼 구간 내 홀수 개수를 구할 때는 각 숫자를 순회하는 대신 나눗셈 몫 연산(//)을 활용하면 코드도 간결해지고 실행 속도도 크게 향상됩니다. 특히 left와 right의 차이가 매우 큰 경우에도 즉시 결과를 얻을 수 있다는 점이 이 방법의 가장 큰 장점입니다.