[Codility] Lesson 11 -ChocolatesByNumbers

개발자·2021년 9월 4일

Task discription

Two positive integers N and M are given. Integer N represents the number of chocolates arranged in a circle, numbered from 0 to N − 1.

You start to eat the chocolates. After eating a chocolate you leave only a wrapper.

You begin with eating chocolate number 0. Then you omit the next M − 1 chocolates or wrappers on the circle, and eat the following one.

More precisely, if you ate chocolate number X, then you will next eat the chocolate with number (X + M) modulo N (remainder of division).

You stop eating when you encounter an empty wrapper.

For example, given integers N = 10 and M = 4. You will eat the following chocolates: 0, 4, 8, 2, 6.

The goal is to count the number of chocolates that you will eat, following the above rules.

Write a function:

int solution(int N, int M);

that, given two positive integers N and M, returns the number of chocolates that you will eat.

For example, given integers N = 10 and M = 4. the function should return 5, as explained above.

Write an efficient algorithm for the following assumptions:

  • N and M are integers within the range [1..1,000,000,000].

Source code

#include <algorithm>

 int gcd(int a, int b) {
    while(b!=0) {
        int r = a%b;
        a = b;
        b = r;
    }
    return a;
}

int solution(int N, int M) {
    int tmp = gcd(N, M);
    return N/tmp;
}

Review

최소공배수를 M으로 나누면 된다고 생각했는데 성능에서 자꾸 오류가 나서 보니
N을 최대공약수로 나누면 되는 더 간단한 문제였다....! 🤭

profile
log.info("공부 기록 블로9")

0개의 댓글