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로 매우 넓기에 저렇게 일일이 세는 방식으로는 계산시간이 너무 오래 걸릴 수밖에 없었다.
for 문을 사용하지 않고 홀수의 개수 구하기
수의 성질을 이용하여 두 정수의 사이에 있는 홀수의 개수 구하기 반복문을 사용할 경우 생기는 문제 일반적으로 for 반복문을 이용해 범위 안에 있는 모든 숫자를 세는 방법을 많이 사용하지
catch-115.tistory.com
위에 서술한 수의 성질을 바탕으로 홀수의 개수를 구하니 Accepted 되었다.
이렇게 시작값과 끝값을 통해 짝수와 홀수의 개수를 구하는 경우 범위에 시작값과 끝값이 포함이 되느냐 아니냐에 수학공식에 대한 설명이 좀 달라 헷갈릴 수 있다. 수의 성질을 이용한 문제일 경우 범위를 잘 봐야 하는 것 같다. 일일이 반복문으로 계산해서 구하는 것보다 입출력되는 수가 어떤 수들인지 분석해보는 버릇을 들여야겠다.
https://leetcode.com/problems/count-odd-numbers-in-an-interval-range/submissions/
'Algorithm > Mastered' 카테고리의 다른 글
[프로그래머스]타겟 넘버 (0) | 2023.11.15 |
---|---|
[백준][2798] 브루트포스, Combinations을 이용한 풀이 (1) | 2022.12.28 |
[LeetCode] 1491. Average Salary Excluding the Minimum and Maximum Salary (0) | 2022.09.18 |
for 문을 사용하지 않고 홀수의 개수 구하기 (0) | 2022.09.15 |
댓글