본문 바로가기
Algorithm/Mastered

[LeetCode]1523. Count Odd Numbers in an Interval Range

by Baley 2022. 9. 17.

LeetCode: 1523. Count Odd Numbers in an Interval Range

Given two non-negative integers low and high. Return the count of odd numbers between low and high (inclusive)

두 정수 low와 high 사이의 수 중에 있는 홀수의 개수를 구하는 문제이다.  홀수를 찾는 범위에는 higt가 포함된다. 

low가 3, high가 7이라면 홀수를 찾는 범위는 4, 5, 6, 7(high)가 된다.

처음에는 for문을 사용하여 2로 나누었을 때 나머지가 1인 수들의 개수를 세려고 했다.

def countOdds(self, low: int, high: int) -> int:
    cnt = 0
    for i in range(low, high+1):
        if i % 2 == 1:
            cnt += 1
    return cnt

수의 범위에 high가 포함되어야 하기 때문에 range로 end값을 설정할 때 high+1을 설정했다.

그러나  Time Limit Exceeded 에러가 나왔고 범위가  최소 0부터 최대 10^9로 매우 넓기에 저렇게 일일이 세는 방식으로는 계산시간이 너무 오래 걸릴 수밖에 없었다.

https://catch-115.tistory.com/entry/for-%EB%AC%B8%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80-%EC%95%8A%EA%B3%A0-%ED%99%80%EC%88%98%EC%9D%98-%EA%B0%9C%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0

 

for 문을 사용하지 않고 홀수의 개수 구하기

수의 성질을 이용하여 두 정수의 사이에 있는 홀수의 개수 구하기 반복문을 사용할 경우 생기는 문제  일반적으로 for 반복문을 이용해 범위 안에 있는 모든 숫자를 세는 방법을 많이 사용하지

catch-115.tistory.com

위에 서술한 수의 성질을 바탕으로 홀수의 개수를 구하니 Accepted 되었다.

이렇게 시작값과 끝값을 통해 짝수와 홀수의 개수를 구하는 경우 범위에 시작값과 끝값이 포함이 되느냐 아니냐에 수학공식에 대한 설명이 좀 달라 헷갈릴 수 있다. 수의 성질을 이용한 문제일 경우 범위를 잘 봐야 하는 것 같다. 일일이 반복문으로 계산해서 구하는 것보다 입출력되는 수가 어떤 수들인지 분석해보는 버릇을 들여야겠다.

https://leetcode.com/problems/count-odd-numbers-in-an-interval-range/submissions/

댓글