Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자 도전기

[국비지원] 17일차- 프로그래머스.피자 나눠 먹기(2) GCD, LCM 본문

개발공부/TIL

[국비지원] 17일차- 프로그래머스.피자 나눠 먹기(2) GCD, LCM

jnnjnn 2024. 2. 29. 02:16

 

오늘의 문제

 

class Solution {
    public int solution(int n) {
        int result = 0;
        loop:
        for(int i = 1; i<100; i++){
            for(int j = 1; j<=6; j++){
            // 피자수 = i , 인당 조각수 = j
                if((i*6) == (n*j)){
                    result = i;
                    break loop;
                }   
            }
        }
        return result;
    }
}

 

result(피자수) * 6 와 n * 인당 피자 조각수가 같으면 되는 문제였기에 이렇게 풀었다.

나중에 다른 분들 풀이를 확인하니 조각수까지는 구할 필요가 없었다...!

 

다른 풀이 중에서 최소공배수와 최대공약수를 사용해서 문제를 푸신 분도 있었는데 이해하느라 한참 걸려서 정리해본다

 

class solution{
	public int GCD(int num1, int num2){
    	if(num1 % num2 == 0)
        	return num2;
        else
        	return GCD(num2, num1 % num2);
    }
    
    public int LCM(int num1, int num2){
    	num1 * num2 / GCD(num1, num2);
    }
    
    public int solution(int n){
    	return LCM(n, 6) / 6;
    }
}

 

위에서 말했듯 (n :사람수) * (피자조각수) = (피자수) * 6의 식이 만들어지기 때문에

n과 6의 값이 주어졌을 때 좌항과 우항은 이 둘의 최소공배수를 구한 후, n과 6의 최소공배수를 제외한 서로소를 구하고

좌항과 우항에 서로소를 각각 반대로 곱하면 같아진다.

 

예를 들어 인원수(n)이 15라고 했을 때

 

15 * 조각수 = 6 * 피자수

 

이는

 

3 * 5 * 조각수 = 2 * 3 * 피자수

 

와 같고 이 둘의 최소공배수는 2 * 3 * 5이기 때문에 각각의 서로소인 2와 5를 조각수와 피자수에 대입해주면 된다.

 

서로소와 최소공배수는 최소공약수를 알아야 하기 때문에 n과 6의 최대공약수를 구해야 한다.

최대공약수는 유클리드 호제법이라는 알고리즘을 통해 구할 수 있다

유클리드 호제법

A와 B의 두 수가 있을 때, 두 수의 나머지의 값이 0이 될 때까지

B를 A와 B의 나머지로 나누면 마지막으로 나눈 값이 두 수의 최대공약수가 되는 법칙이다

 

https://kdhsmarto.tistory.com/m/15

 

'최소 공배수' 와 '최대 공약수', '유클리드 호제법' 과 '서로소'.

오늘은 제목에 적은 내용들을 설명해보겠습니다. 제목의 역순으로 설명하겠습니다. 서로소. 서로소는 서로 다른 자연수가 각자 1과 자기자신 이외에 약분되는 자연수가 없는 것을 말합니다. 예)

kdhsmarto.tistory.com

 

A = aG, B = bG 라 할 때,

 

GCD // 최대공약수 구하기

return G (최대공약수)

 

LCM // 최소공배수 구하기

return aG * bG / G

// a* b * G (최소공배수)

 

solution // 서로소 구하기

return a * b * G / bG

// a

// a는 피자수

 

 

TIL


https://abc-datatype.tistory.com/58

 

[JAVA] 2차원 배열, 다차원 배열

다차원 배열이란 배열 속에 또 다른 배열이 들어있는 것을 말한다. 배열 변수는 1차원 배열의 참조값을 가지고, 1차원 배열의 값은 2차원 배열의 참조값을 가진다. 다음과 같이 선언하고 접근할

abc-datatype.tistory.com

 

 

 

 

 

 

오늘의 플레이리스트...