알고리즘 입문 문제 1일차 & 2일차

2023. 1. 2. 18:07알고리즘/문제

모든 문제와 사진의 저작권은 프로그래머스에 있습니다. 

알고리즘과 코틀린의 숙련도를 향상하기 위해 찾아보던 중 발견한 프로그래머스 입문 과정입니다.

상당히 입문용으로 좋다고 생각해 코틀린을 사용해 전부 해보기로 하였습니다.

 

아래의 링크를 타면 매일 풀 수 있는 문제가 있습니다. 

모두 실력 향상을 위해 정진!!

https://school.programmers.co.kr/learn/challenges/beginner?order=acceptance_desc&page=1 

 

코딩테스트 입문 | 프로그래머스 스쿨

코딩테스트에 처음 도전하는 사람들을 위한 입문 문제 모음. 쉬운 문제부터 하나씩 도전해 보면서 코딩테스트에 자신감도 붙이고 문제 해결 능력을 키워보세요!

school.programmers.co.kr

 

오늘은 많은 문제 중 기억해야하는 부분을 정리하겠습니다. 1편 시작.

 

1일 차와 2일 차에는 정말 기본적인 것만 있습니다. 

다들 하실 수 있다고 생각합니다.

 

이 중에 Day2 배열 두 배 만들기를 보면

 

코틀린을 사용하여 아주 간단하게 할 수 있습니다.

numbers [ 1, 2, 3, 4, 5] 

result [ 2, 4, 6, 8, 10 ]

각 배열의 값을 두배한 배열을 반환하면 됩니다.

 

코틀린의 콜렉션 Transformation map을 이용하여 아주 간단하게 표현할 수 있습니다.

for문을 이용해 같은 하나씩 읽어 새로운 배열에 X2 한 값을 넣고 새로운 배열을 return 할 수 있지만

코틀린은 아래처럼 한 줄로 가능합니다.

fun solution(numbers: IntArray) = numbers.map { it*2 }

map 에 관한 자세한 내용은 아래에서 확인할 수 있습니다.

 

https://dev-musa.tistory.com/74

 

Kotlin Map

 

dev-musa.tistory.com

 

두 번째로

 

분수 만들기!

분수 만들기는 

 

입력으로 4개의 숫자를 주고 앞의 두 개가 첫번째 분수 뒤의 두개가 두 번째 분수입니다.

두 개를 더해서 약분된 분자 분모를 담은 배열을 return 해야 합니다.

 

분수 만들기에서 중요한 건

최대공약수를 구하는 것입니다.

 

최대 공약수는 ( Greatest Common Divisor, GCD ) 대표적으로 두 가지 방법을 사용해 구할 수 있습니다.

1. 반복문

2. 재귀함수

 

1. 반복문 

fun gcd(a: Int, b: Int) : Int {
        var num1 = a
        var num2 = b
        while(num2 != 0 ) {
        if( num1 < num2 ) {
            val temp = num1
            num1 = num2
            num2 = temp
        }
        val t = num1%num2
        num1 = num2
        num2 = t
    }
        return num1
    }

2. 재귀 함수

fun gcd(a: Int, b:Int): Int = if (b != 0) gcd(b, a % b) else a

유클리드 호제법을 이용하여 코드를 구성하였습니다.

 

분수를 먼저 통분하고 gcd를 통해 나누어 주면 간단하게 답을 구할 수 있습니다.

 

다음 시간에 뵙겠습니다.