[Java] while문 2

코드 속의 "진돌"·2023년 12월 27일
0
post-thumbnail

✅ 문제 : 1부터 하나씩 증가하는 수를 3번 더해라 (1 ~ 3 더하기)


이 문제는 1부터 하나씩 증가하는 수이기 때문에 1 + 2 + 3을 더해야 한다.
우선 while문을 사용하지 않고 단순하게 풀어보자.

✏️ While2_1

package loop;

public class While2_1 {

  public static void main(String[] args) {
    int sum = 0;
    
    sum = sum + 1;  // sum(0) + 1 -> sum(1)
    System.out.println("i = "  + 1 + " sum = " + sum);

    sum = sum + 2;  // sum(1) + 2 -> sum(3)
    System.out.println("i = "  + 2 + " sum = " + sum);

    sum = sum + 3;  // sum(3) + 3 -> sum(6)
    System.out.println("i = "  + 3 + " sum = " + sum);
  }
}

✏️ 출력 결과

이 코드의 정답은 맞다. 하지만 개선할 점이 많이 있는데, 무엇보다 변경에 유연하지 않다.

다음과 같이 요구사항이 변경되었다.
문제 : 10부터 하나씩 증가하는수를 3번 더해라 (10 ~ 12 더하기)

이렇게 되면 10 + 11 + 12를 계산해야 한다. 문제는 코드를 너무 많이 변경해야 한다는 점이다.

변수를 사용해서 더 변경하기 쉬운 코드로 만들어보자. 변경되는 부분을 변수 i로 바꾸어보자.

✅ 문제 : i부터 하나씩 증가하는 수를 3번 더해라 (i ~ i + 2 더하기)


✏️ While2_2

package loop;

public class While2_2 {

  public static void main(String[] args) {
    int sum = 0;
    int i = 1;

    sum = sum + i;  // sum(0) + i(1) -> sum(1)
    System.out.println("i = "  + i + " sum = " + sum);
    i++;  // i = 2

    sum = sum + i;  // sum(1) + i(2) -> sum(3)
    System.out.println("i = "  + i + " sum = " + sum);
    i++;  // i = 3

    sum = sum + i;  // sum(3) + i(3) -> sum(6)
    System.out.println("i = "  + i + " sum = " + sum);
  }
}

✏️ 출력 결과

변수 i를 사용한 덕분에 i의 값만 변경하면 나머지 코드를 전혀 변경하지 않아도 된다.

i=10으로 변경하면 다른 코드의 변경 없이 앞서 이야기한 10 + 11 + 12의 문제도 바로 풀 수 있다.

✏️ 출력 결과

좋은 코드인지 아닌지는 변경 사항이 발생했을 때 알 수 있다. 변경 사항이 발생했을 때 변경해야 하는 부분이 적을수록 좋은 코드이다.

✅ 문제 : i부터 하나씩 증가하는 수를 endNum(마지막 수)까지 더해라 (i ~ endNum 더하기)


예)

  • i=1, endNum=3이라고 하면 1 ~ 3까지 총 3번 더해야한다.
  • i=1, endNum=10이라고 하면 1 ~ 10까지 총 10번 더해야한다.
  • i=10, endNum=12라고 하면 10 ~ 12까지 총 3번 더해야한다.

먼저 i=1, endNum=3이라고 생각하고 문제를 풀어보자

✏️ While2_3

package loop;

public class While2_3 {

  public static void main(String[] args) {
    int sum = 0;
    int i = 1;
    int endNum = 3;

    sum = sum + i;
    System.out.println("i = "  + i + " sum = " + sum);
    i++;

    sum = sum + i;
    System.out.println("i = "  + i + " sum = " + sum);
    i++;

    sum = sum + i;
    System.out.println("i = "  + i + " sum = " + sum);
		i++;
  }
}

✏️ 실행 결과

i=1, endNum=3이므로 다음 코드를 총 3번 반복해야 한다.

sum = sum + i;
System.out.println("i = " + i + " sum = " + sum);
i++;

그런데 i=1, endNum=10과 같이 변경하면 이 코드를 총 10번 반복해야 한다. 따라서 같은 코드를 더 많이 추가해야 한다.

이 문제를 제대로 풀기 위해서는 코드가 실행되는 횟수를 유연하게 변경할 수 있어야 한다. 한마디로 같은 코드를 반복 실행할 수 있어야 한다.

while문을 사용하면 원하는 횟수 만큼 같은 코드를 반복 실행할 수 있다.

✏️ While2_3 - 코드 변경

package loop;

public class While2_3 {

  public static void main(String[] args) {
    int sum = 0;
    int i = 1;
    int endNum = 3;

    while (i <= endNum) {
      sum = sum + i;
      System.out.println("i = "  + i + " sum = " + sum);
      i++;
    }
  }
}

✓ 반복 횟수 정하기

iendNum이 될 때 까지 반복해서 코드를 실행하면 된다.

  • i=1, endNum=3이라면 3번 반복하면 된다. i = 1 → 2 → 3
  • i=3, endNum=4라면 2번 반복하면 된다. i = 3 → 4

✓ while문 작성하기

  • while문에서 i <= endNum 조건을 통해 iendNum이 될 때 까지 코드 블럭을 실행한다.
  • iendNum보다 크면 while문을 종료한다.

✏️ 실행 결과



✏️ 그림을 통해 코드를 분석해보자.

왼쪽은 while의 조건식을 체크하는 단계이고, 오른쪽은 조건식을 통과하고 나서 while문의 코드 블럭을 실행하는 부분이다.

✓ i=1, endNum=3

  • 조건식을 만족한다.
  • i=1, sum=1을 출력한다.

✓ i=2, endNum=3

  • 조건식을 만족한다.
  • i=2, sum=3을 출력한다.

✓ i=3, endNum=3

  • 조건식을 만족한다.
  • i=3, sum=6을 출력한다.

✓ i=4, endNum=3

  • 조건식을 만족하지 않는다.
  • while문을 종료한다.

✏️ 실행 코드 분석

sum(0), i(1), endNum(3)

// 루프 1
while (i(1) <= endNum(3)) -> true
sum(0) + i(1) -> sum(1)
i(1)++ -> i(2)

// 루프 2
while (i(2) <= endNum(3)) -> true
sum(1) + i(2) -> sum(3)
i(2)++ -> i(3)

// 루프 3
while (i(3) <= endNum(3)) -> true
sum(3) + i(3) -> sum(6)
i(3)++ -> i(4)

// 루프 4
while (i(4) <= endNum(3)) -> false
profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글