룬아님의 취중코딩

Codility 33번 ChocolatesByNumbers 본문

개발/알고리즘

Codility 33번 ChocolatesByNumbers

룬아님 2019. 10. 29. 21:03

ChocolatesByNumbers

 

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:

class Solution { public 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].

    Copyright 2009–2019 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

 

class Solution {
    public int solution(int N, int M) {
        // write your code in Java SE 8
        int[] coList = new int[N];
        int pos = 0;
        int ans = 0;
        while(coList[pos] == 0){
            coList[pos] = 1;
            ans++;
            if(pos + M >= N) {
                pos = (pos + M)%N;
            }else{
                pos = pos+M;
            }
        }
        
        return ans;
    }
}

 

class Solution {
    public int solution(int N, int M) {
        long pos = 0;
        int ans =0;
        while(!(pos >= N && pos%N == 0)){
            pos += M;
            ans ++;
        }
        
        return ans;
    }
}

 

class Solution {
    public int solution(int N, int M) {
        // write your code in Java SE 8
        int gcd;
        long ans;
        gcd = eatChocolate(N,M);
        ans = N/gcd;
        
        return (int)ans;
    }
    
    int eatChocolate(int a, int b){
        if(b == 0){
            return a;
        }
        return eatChocolate(b, a%b);
    }
}
반응형

'개발 > 알고리즘' 카테고리의 다른 글

직사각형 나머지 좌표 구하기  (0) 2020.03.11
Codility 34번 CommonPrimeDivisors  (0) 2019.11.05
Codility 32번 CountNonDivisible  (0) 2019.10.20
Codility 31번 CountSemiprimes  (0) 2019.10.19
Codility 29번 Peaks  (0) 2019.09.30
Comments