SWLUG(2025)/Algorithm

[SV 4주차] 약수의 개수와 덧셈, 콜라츠 추측, 멀리 뛰기

batterygj 2025. 8. 12. 00:04

Q. 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

  1. left와 right를 매개변수로 하는 solution 함수를 정의한다.
  2. 구하는 값을 나타내는 변수 answer를 0으로 초기화하고 left부터 right까지 돌면서 각 수의 약수의 개수를 구한다 . 약수의 개수를 뜻하는 변수 count도 0으로 초기화한다.
  3. 1부터 i까지 돌면서 i를 j로 나누었을 때, 나머지가 0이면 j는 i의 약수라는 뜻이므로 count에 1을 더한다.
  4. for문을 다 돈 후에 count를 2로 나누었을 때, 나머지가 0이 아니면 약수의 개수가 홀수라는 뜻이므로 answer에서 i를 뺀 값을 answer라 하고 그렇지 않으면 answer에 i를 더한 값을 answer라 한다.
  5. for문을 다 돈 후에 최종적인 answer를 반환한다.

 

 

 


 

Q. 1937년에 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

1-1. 입력된 수가 짝수라면 2로 나눕니다.

1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.

2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 -1을 반환해 주세요.

 

  1. 주어진 수를 나타내는 변수 num을 매개변수로 하는 solution 함수를 정의한다.
  2. 주어진 수가 1이면 0을 반환한다.
  3. count를 작업을 하는 횟수를 나타내는 변수라 하자.
  4. 주어진 수가 1이 아닐때까지 다음을 반복하게 한다.
  5. 만일 count가 500 이상이면 -1을 반환한다. 만일 num을 2로 나누었을 때 나머지가 0이면 num은 num을 2로 나눈 수라 한다. 그렇지 않으면 num을 num에 3을 곱하고 1을 더한 수라 한다. 그 후 count에 1을 더한다.
  6. num이 1이되면 count를 반환한다.

 

 

 


 

Q. 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는

(1칸, 1칸, 1칸, 1칸)

(1칸, 2칸, 1칸)

(1칸, 1칸, 2칸)

(2칸, 1칸, 1칸)

(2칸, 2칸)

의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.

  1. n=1일때부터 n=4까지 경우의 수를 나열해보면 규칙을 발견할 수 있다. n번째 경우의 수는 n-2번째 경우의 수와 n-1번째 경우의 수를 더한 값이다.
  2. n을 매개변수로 하는 solution함수를 정의한다.
  3. n이 1이면 1을 반환하고, 2이면 2를 반환한다.
  4. a를 1칸까지 가는 경우의 수인 1이라 하고, b를 2칸까지 가는 경우의 수인 2라 하자.
  5. 3부터 n까지 돌면서 a에는 기존의 b값을 대입하고 b에는 a와 b를 더한값을 1234567로 나눈 나머지를 대입한다. (숫자가 커지는 것을 방지하기위해 항상 1234567로 나눈 나머지를 대입하는 것)
  6. b를 반환한다.