새소식

자료구조, 알고리즘 입문

자료구조, 알고리즘 입문 1-2 : 반복_정수의 합 구하기

  • -

1부터 n까지 정수의 합 구하기

  • while문 반복
    반복구조 : 어떤 조건이 성립되는 동안 처리를 반복하여 실행하는 것(루프)
    while문 형식 : while(제어식) 명령문
int sum = 0;
int i = 1;

while (i <= n) { //변수 i값이 n이하인 동안 i값을 1씩 증가하면서 n회 반복실행
sum += i;
i++;

 

  • 가우스의 덧셈을 활용한 식
    ex)1~10의 합은 (1+10)*5
int sum = (1+n)*(n/2) + (n%2==1?(n+1)/2:0);

 

  • for문 반복
    : 하나의 변수를 사용하는 반복문은 while문보다 for문을 사용하는 것이 좋다.
    for문 형식 : for(초기화부분; 제어식; 업데이트부분) 명령문
int sum = 0;

for(int i=1; i<=n; i++)
sum += i; //sum에 i를 더한다.

 

  • 정수  a,b 포함 그 사이의 모든 정수의 합을 구하는 for문
static int sumof(int a, int b) {
   int min;
   int max;

   if(a<b) {
   min=a; max=b;
   }else {
   min=b; max=a;
   }

   int sum = 0;
   for (int i=min; i<=max; i++)
      sum += i;
   return sum;
   }

-int i=min처럼 for문 안에 선언된 변수는 for문 안에서만 사용이 가능하다. 만약 for문을 종료한 이후에도 변숫값을 사용하려면 for문앞에 int i; 와 같이 변수를 선언해주면된다.

- i<=max와 같은 제어식은 생략이 가능하지만, 생략 시 본문에 break문이나 return문이 없으면 무한반복된다.

-i++와 같은 업데이트 부분은 쉼표로 구분하여 여러 개의 식을 작성할 수도 있고 생략할 수도 있다.

 

 

양수만 입력받아 1부터 n까지의 합 구하기

  • do-while문
    do-while문 형식 : do-while(제어식);  (while,for문과 다르게 뒤에 ;이 붙는다!)
do {
   System.out.print("n값 : ");
   n = sc.nextInt();
}while (n <= 0);
// n값이 0이하이면 루프 본문이 반복 실행됨. -> n값 : 이 계속 출력됨.
// 따라서 n값은 양수이어야 한다.

int sum = 0;

for(int i=1; i<=n; i++)
   sum += i;

 

  • 특정 변수가 다른 변수보다 큰 값이 나오도록 할 때
int a = sc.nextInt();

int b; //while문이 끝난 뒤에도 변숫값을 사용할 수 있도록
while(true) {
   System.out.print("b의 값 : ");
   b = sc.nextInt();
   if(b>a) break;
   System.out.println("a보다 큰 값을 입력하세요.");
}
System.out.println("b-a는 " + (b-a) + "입니다.");

 

  • 양의 정수를 입력하고 자릿수를 출력하도록 할 때
int a;
do {
   System.out.print("정숫값 : ");
   a = sc.nextInt();
}while(a<=0); //양의 정수이미로 0보다 작거나 같을 경우 반복됨.

int no = 0;
while(a>0) {
   a /= 10;
   no++;
}
//a가 40일 경우 40/=10 = 4; no++ = 1;
// 이후 4/10=0이하; no++2; -> 반복되는 횟수가 자릿수
//조건식과 부합하지 않아 while문으로 빠져나감
//a가 110일 경우 120/=10 = 12; no++1;
// 12/=10 = 1.2; no++2;
// 1.2/10 = 0이하; no++3; while문으로 빠져나감
System.out.println(no + "자리입니다.");

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.