본문 바로가기

Algorithm

(3)
요세푸스 문제: Kotlin과 Queue를 사용한 고전적인 퍼즐 풀기 요세푸스 문제는 수세기 동안 존재해 온 고전적인 퍼즐입니다. 그것은 유대-로마 전쟁 중에 유사한 전략을 사용했다고 알려진 고대 유대 역사가 요세푸스의 이름을 따서 명명되었습니다. 이 퍼즐에서 n명의 사람들이 원 안에 서 있고 한 사람만 남을 때까지 k번째 사람을 모두 제거해야 합니다. 문제 진술 1에서 n까지 번호가 매겨진 원 안에 n명의 사람이 있다고 가정합니다. 1인부터 시작해서 한 사람만 남을 때까지 k번째 사람마다 제거해야 합니다. 예를 들어 서클에 10명의 사람이 있고 k=3인 경우 다음 사람을 제거합니다. 1, 4, 7, 10, 5, 2, 9, 6, 3 마지막으로 남은 사람은 8번째 사람입니다. 큐(Queue)를 사용하여 요세푸스 문제를 해결하기 위해 모든 사람을 대기열에 추가하는 것으로 시..
최초의 알고리즘 중 하나! 유클리드 호제법으로 최대공약수 구하기 유클리드 호제법(Euclidean Algorithm)은 두 수의 최대공약수(GCD, Greatest Common Divisor)를 구하는 방법 중 하나로, 인류 최초의 알고리즘 중 하나로서도 알려져 있습니다. 두 수 a와 b의 최대공약수를 구하기 위해서는, 다음과 같은 과정을 반복합니다. a를 b로 나눈 나머지 r을 구합니다. 만약 r이 0이면, b가 a와 b의 최대공약수가 됩니다. 즉, GCD(a, b) = b입니다. 만약 r이 0이 아니라면, b와 r의 최대공약수를 구하기 위해, 다시 b를 r로 나눕니다. 이때, r이 0이 될 때까지 반복합니다. fun gcd(a: Int, b: Int): Int { if (b == 0) return a return gcd(b, a % b) } 예를 들어, 54와 2..
백준]17427 약수의 합2 17427 약수의 합2 https://www.acmicpc.net/problem/17427 패턴 찾다 약수의 합을 나열 1 → 1 2 → 1 + 2 3 → 1 + 3 4 → 1 + 2 + 4 5 → 1 + 5 6 → 1 + 2 + 3 + 6 7 → 1 + 7 8 → 1 + 2 + 4 + 8 9 → 1 + 3 + 9 10 → 1 + 2 + 5 + 10 n 의 배수에 해당 되는 수는 n 값이 무조건 포함 되어 있다. 10 = 1 , 2, 5, 10 1의 배수 2의 배수 5의 배수 10의 배수 배열을 미리 생성해 두고 배열의 index을 해당 수의 총합 값을 저장 한다. 예 [10] = 1 + 2 + 5 + 10 그럼 이러한 형태로 저장 되게 된다. Index : 0 1 2 3 4 5 Value : 0 1 3..