코틀린-안드로이드

22일차)알고리즘 문제(N개의 최소공배수), 복습(배열생성, ArrayDeque,repeat,forEachIndexed) 개인과제(키오스크)

songyooho 2024. 6. 13. 20:02

>알고리즘 문제

 

1. 문제

문제 설명

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

제한 사항
  • arr은 길이 1이상, 15이하인 배열입니다.
  • arr의 원소는 100 이하인 자연수입니다.

2. 솔루션

class Solution {
    fun solution(arr: IntArray): Int {
        var answer = 1
        for(i in arr){
            answer=lcm(answer,i)
        }
        
        
        return answer
    }
    
    fun gcd(a:Int, b:Int):Int{
        if (b == 0) {
            return a
        }
        return gcd(b, a % b)
    }
    
    fun lcm(a:Int, b:Int):Int{
        var gcd=gcd(a,b)
        return (a*b)/gcd
    }
    

}

-유클리드 호제법으로 gcd구하는 함수를 재귀형식으로 만들음

-a,b의 최소공배수는 (a*b)/gcd(a,b)임을 이용해 lcm구하는 함수를 만들음

-앞에서 부터 두개씩 lcm을 구하는 방식으로 풀음

 

 

>복습

 

1. 배열 생성-특정값이나 인덱스 기준으로

=>자료형Array(길이){특정값 or 인덱스 it으로 이루어진 표현식}

 

2. 스택, 큐, 덱: 되도록이면 ArrayDeque이용하기

 

3. repeat(숫자){본문}:본문을 숫자만큼 반복

 

4.forEachIndexed{ idx, value -> 본문}: 컬렉션 다룰때 인덱스와 값으로 각각에 연산하고자 할 시 사용

 

>개인과제(키오스크)

https://appdevelopjava.tistory.com/29

 

키오스크 제작

1. 개요1)클래스-Menu: 모든 메뉴를 통합해 관리하기위한 추상 클래스 -Pizza: 피자 메뉴를 관리하기 위한 추상클래스, Menu상속-Drink: 음료 메뉴를 관리하기 위한 추상클래스, Menu상속-Side: 사이드 메

appdevelopjava.tistory.com