Lesson 5 Prefix Sums - CountDiv (Java Solution)
app.codility.com/programmers/lessons/5-prefix_sums/count_div/
문제
A,B,K가 주어진다
{ i : A <= i <= B, i mod K=0 }
A와 B사이의 정수들 중에 K로 나눴을 때 나머지가 0인인 정수들의 개수를 출력하는 문제이다
해결
A부터 B까지 돌면서, 최초로 나머지가 0이 나오는 수를 init에 저장한 후, break 한다
그리고 B를 K로 나눴을 때 몫에서 init을 K로 나눈 몫을 뺀 후, 1을 더해주면 된다
예를 들면, A = 6 B = 11, K = 2이면,
[6,7,8,9,10,11] 중에서 2로 나눠서 나머지가 0인 정수는 6,8,10이므로 답은 3이다
위의 로직에 맞춰보면,
6부터 돌면서 2로 나눠서 나머지가 0인 최초의 수는 6이다
init = 6이고, B는 11이다
6~11 사이 2로 나누어 떨어지는 정수들의 개수(11/2 + 6/2 + 1)를 출력할 수 있다
예외로 A==B 같을 경우는 따로 처리해줬다
public class CountDiv {
public int solution(int A, int B, int K) {
int init = 0;
for (int i=A; i<=B; i++) {
if (i % K == 0) {
init = i;
break;
}
}
if (A==B) return A%K == 0 ? 1 : 0;
int result = B/K - init/K + 1;
return result;
}
}
한번 다른 풀이를 찾아봤는데,
생각해보니 따로 init을 구할 필요가 없었다
if(A%K==0)
return B/K - A/K +1;
return B/K - A/K;
그냥 A를 K로 나눠서 나머지가 0이면 B/K - A/K + 1 아니면 B/K - A/K를 출력하면 된다
'Algorithm > Codility' 카테고리의 다른 글
[Codility(코딜리티)] Lesson7. Nesting (100%) (0) | 2020.09.14 |
---|---|
[Codility(코딜리티)] Lesson7. Fish (100%) (0) | 2020.09.13 |
[Codility(코딜리티)] Lesson4. PermCheck (100%) (0) | 2020.09.12 |
[Codility(코딜리티)] Lesson4. MissingInteger (100%) (0) | 2020.09.12 |
[Codility(코딜리티)] Lesson4. MaxCounters (88%) (0) | 2020.09.09 |
댓글