본문 바로가기

코드이야기/R

[R프로그래밍] 조건문을 이용하여 콜라츠 추측 계산하기

프로그래밍이란 기본적으로 내 생각을 컴퓨터가 이해할 수 있도록 입력하고 동작하게 만드는 일입니다. 프로그래밍을 하기 위해서는 생각이 논리적이로 명확하게 정리되어 있어야 합니다. '생각의 흐름은 명쾌한가?', '누락되거나 중복되는 내용은 없는가?', '이 프로그램은 결과를 올바르게 계산해 낼 것인가?'에 대해서 먼저 종이와 연필로 그려보는 것이 프로그래밍에 큰 도움이 됩니다. 생각이 명료하면 프로그래밍이 즐겁습니다. 프로그래밍 언어를 통해 명령을 내리기만 하면 되기 때문입니다.


대부분의 프로그래밍 언어에서 조건문과 반복문을 사용할 수 있습니다. 조건문은 조건이 '참(True)'일 때 처리하는 명령과 '거짓(False)'일 때 처리하는 명령을 달리 가져갑니다. 반복문은 일정 범위 또는 특정한 조건을 만족하는 동안 명령을 반복해서 수행합니다.


R도 if/else, for, while과 같은 조건문과 반복문을 제공합니다. 우선, R에서 조건문을 사용하는 방법과 활용 예를 살펴보겠습니다. 조건문을 사용하기 위한 문법은 아래와 같습니다.


if (조건식) {

    조건식이 참일 때 실행되는 명령

    } else {

    조건식이 거짓일 때 실행되는 명령

}


R에서의 조건문은 중괄호({ })로 둘러쌉니다. 조건을 판단하기 위한 연산자로는 '같다(==)', '같지 않다(!=)', '크거나 같다(>=)', '크다(>)', '작거나 같다(<=)', '작다(<)'가 있습니다. 조건문의 중첩 역시 가능합니다.


이제 R의 조건문을 사용해 간단한 프로그램을 만들어 보겠습니다. 콜라츠의 추측은 1937년 이 추측을 제기한 로타르 콜라츠의 이름을 딴 것으로 3n+1추측 또는 우박 추측으로 불립니다. 어떤 임의의 자연수를 뽑아 그 수가 짝수면 2로 나누고, 홀수면 3을 곱한다음 1을 더합니다. 이 과정을 반복하면 결국 1이 된다는 것입니다. Collatz라는 함수를 만들어 자연수 10이 과연 몇 번 만에 1이 되는지 프로그래밍 해보겠습니다. 함수를 정의 하는 방법은 '헤론의 공식으로 삼각형의 넓이를 구하는 함수 정의하기' 포스팅을 참고하시기 바랍니다.

Collatz <- function(n) {
  if (n %% 2 == 0) {
    return (n/2)
  } else {
    return (3*n + 1)
  }
}

함수를 정의 했습니다. 한 번 실행해 보겠습니다.

> Collatz(10)
[1] 5
> Collatz(5)
[1] 16
> Collatz(16)
[1] 8
> Collatz(8)
[1] 4
> Collatz(4)
[1] 2
> Collatz(2)
[1] 1

6번 만에 만에 1이 되는 군요. 그런데 1이 될 때까지 함수를 계속 입력해야 하는 것이 불편합니다. 한 번만 입력하면 몇 번만에 1이 되는지 횟수와 숫자가 변해가는 과정도 보여주고 싶습니다. 다음 포스팅에서 반복문을 사용하여 구현해 보겠습니다. 사진: 위키피디아