[R] 자연수들의 제곱합 계산하기 (for/while/repeat 비교)

R-자연수-제곱합-계산

해당 포스트에서는 R 반복문(for/while/repeat)들을 이용하여 자연수들의 제곱합을 구하는 방법을 설명합니다.

1. INTRO

네이버 지식iN에서 지식을 공유하고 있습니다. 간단한 질문들은 해당 질문에 바로 답변을 드리지만 질문의 내용이 유익하거나 추가 설명이 필요한 경우에는 포스팅을 작성하여 공유드리고 있습니다.

2. 질문

네이버-지식인-질문
▲ 네이버 지식인 질문

3. 풀이

R에서 자연수들의 제곱합을 구하는 계산은 반복문을 활용한 수식 구현 문제 중 초급 난이도로 볼 수 있습니다. 위 문제에서는 단순히 제곱합만을 계산하는 것이 아닌 최초로 제곱합이 언제 1000을 초과하는지를 찾는 변형 문제로 조건문을 이용하여 쉽게 해결할 수 있습니다.

아래에서는 R에서 제공하는 3가지 반복문을 이용하여 위 문제풀이를 설명해 보겠습니다.

  1. for 문
  2. while 문
  3. repeat 문

1. for 문

for문을 사용할 때에는 반복의 시작과 끝을 미리 정의하여야 합니다. 이번 문제에서는 언제 해당 조건이 만족할지 모르는 상황이기에 임의의 큰 숫자 1000을 넣었고, 제곱합(sum_of_squares)이 1000을 넘게되면 조건문을 중단(if(sum_of_squares > 1000) break)하도록 구현하였습니다.

sum_of_squares <- 0

for (i in 1:1000){
  sum_of_squares <- sum_of_squares + (i^2)
  cat("i = ", i, "| sum_of_squares = ", sum_of_squares, "\n")
  if(sum_of_squares > 1000) break
}
## i =  1 | sum_of_squares =  1 
## i =  2 | sum_of_squares =  5 
## i =  3 | sum_of_squares =  14 
## i =  4 | sum_of_squares =  30 
## i =  5 | sum_of_squares =  55 
## i =  6 | sum_of_squares =  91 
## i =  7 | sum_of_squares =  140 
## i =  8 | sum_of_squares =  204 
## i =  9 | sum_of_squares =  285 
## i =  10 | sum_of_squares =  385 
## i =  11 | sum_of_squares =  506 
## i =  12 | sum_of_squares =  650 
## i =  13 | sum_of_squares =  819 
## i =  14 | sum_of_squares =  1015

2 while 문

while문을 이용할 때에는 TRUE를 이용하여 무한반복과 같은 수행이 가능합니다. 아래에서는 TRUE를 만족하는 동안 제곱합을 지속적으로 계산하면서 제곱합(sum_of_squares)가 1000을 넘으면 반복을 중단하도록 구현하였습니다.

참고로, while문에는 자연수(i)의 증가를 별로도 반영(i <- i + 1)해 주어야 합니다.

위에서 설명드린 for문에서는 i의 범위를 1:1000까지 증가하도록 정의하였기에 자동 증가하며 계산됩니다.

sum_of_squares <- 0
i <- 1

while (TRUE){
  sum_of_squares <- sum_of_squares + (i^2)
  cat("i = ", i, "| sum_of_squares = ", sum_of_squares, "\n")
  if(sum_of_squares > 1000) break
  i <- i + 1
}
## i =  1 | sum_of_squares =  1 
## i =  2 | sum_of_squares =  5 
## i =  3 | sum_of_squares =  14 
## i =  4 | sum_of_squares =  30 
## i =  5 | sum_of_squares =  55 
## i =  6 | sum_of_squares =  91 
## i =  7 | sum_of_squares =  140 
## i =  8 | sum_of_squares =  204 
## i =  9 | sum_of_squares =  285 
## i =  10 | sum_of_squares =  385 
## i =  11 | sum_of_squares =  506 
## i =  12 | sum_of_squares =  650 
## i =  13 | sum_of_squares =  819 
## i =  14 | sum_of_squares =  1015 

3. repeat 문

repeat문은 위에서 설명드린 while문과 유사합니다. while문에서는 반복 조건을 정의하여 횟수를 제한할 수 있으나 repeat문은 반복 조건이 없어 실행 구문 내용이 무한히 반복됩니다. 반복을 멈추기 위해서는 if문(if(sum_of_squares > 1000) break)을 이용하면 됩니다.

참고로, repeat문에도 자연수(i)의 증가를 별로도 반영(i <- i + 1)해 주어야 합니다.

while(TRUE){ } 반복문은 repeat{ } 반복문과 동일하게 동작합니다.

sum_of_squares <- 0
i <- 1

repeat{
  sum_of_squares <- sum_of_squares + (i^2)
  cat("i = ", i, "| sum_of_squares = ", sum_of_squares, "\n")
  if(sum_of_squares > 1000) break
  i <- i + 1
}
## i =  1 | sum_of_squares =  1 
## i =  2 | sum_of_squares =  5 
## i =  3 | sum_of_squares =  14 
## i =  4 | sum_of_squares =  30 
## i =  5 | sum_of_squares =  55 
## i =  6 | sum_of_squares =  91 
## i =  7 | sum_of_squares =  140 
## i =  8 | sum_of_squares =  204 
## i =  9 | sum_of_squares =  285 
## i =  10 | sum_of_squares =  385 
## i =  11 | sum_of_squares =  506 
## i =  12 | sum_of_squares =  650 
## i =  13 | sum_of_squares =  819 
## i =  14 | sum_of_squares =  1015

4. 마무리

이번 포스트에서는 R에서 자연수 제곱합 계산을 다양한 반복문들로 구현해 보았습니다. 비슷하지만 서로 다른 반복문들 각각의 용도와 활용법을 숙지하신다면 R프로그래밍 초급 단계를 쉽게 클리어하실 수 있으실 겁니다.


banner-request-analysis