TIL : 221203~4

JINSEON YE·2022년 12월 5일

TIL

목록 보기
27/88

JAVA

반복문

while문

시작 조건;
While(반복 조건<-언제까지?) {
	반복적으로 실행될 구문;
    진행 조건;
}

while(true) <-트루로 고정됨 <-하드코딩
근데 트루로하면 계속 실행되니까 멈추도록 해야함.
int i = 0;

while (i<10) { 
	System.out.println("1"); 
	i++; // i=i+1;
}

for문

for(초기화(시작 조건); 종료 조건(반복 조건); 반복실행(진행 조건)) {
  반복 내용(반복적으로 실행될 구문);
}
< for문으로 구현 >

for (int i=0; i<10; i++) {
  System.out.println("1"); 
}

while, for 차이

1을 10번 출력하고 싶다고 하면, 다음과 같이 구현할 수 있다.

< while문으로 구현 >

int i=0;		//언제까지 반복될 것이냐! 를 설명하는 요소

while (i<10) {				//언제까지 반복될 것이냐! 를 설명하는 요소
  System.out.println("1");	<- 이 부분이
  i++;						//언제까지 반복될 것이냐! 를 설명하는 요소
}

-> 서로 밀접한 관계의 로직임에도 서로 멀리 떨어져있음.
ex) int i=0; 아래와 sout 아래에 로직이 1000줄이라고 가정한다면 코드가 복잡해짐에 따라 언제까지 반복될 것이냐! 를 설명하는 요소가 멀리 떨어지게 됨. -> 코드를 작성하는 것이 어려워질 수 있게 됨

  • 그러한 while의 특징을 보완하여 자주 사용되는 패턴을 문법적인 요소로 발전 시킨 것이 for문이다.
< for문으로 구현 >

for (int i=0; i<10; i++) {	//하나의 문법적인 것으로 응집시켜 놓기에, 보기도 좋고 관리하기 좋다.
  System.out.println("1");
}

-> 초기값이 있고 언제까지 반복할 것이냐는 조건이 있고 "반복될 때마다 초기값을 변경시켜주는(초기화)" 구성을 갖고있는 반복문이라면 for문이 바람직함

하지만 일반적으로는 반복 횟수를 아는 경우 for, 모르는 경우 while을 쓰라고 말하는데, 꼭 그렇지는 않다.
1) for문의 구조를 보면 시작 조건을 입력할 때 반드시 변수를 초기화시킨다. 즉 for 문 안에서 변수의 초기화가 이루어지는 것이다. 따라서 루프를 시작하기 전에 이미 변수가 초기화되어있다면 while을 쓰는 것이 더 직관적이다. 반복 횟수가 정해져있다고 하더라도, 굳이 다시 초기화를 하면서 for문을 사용할 필요는 없다.
2) 또, 가독성 측면에서 while문이 더 나은 측면도 있다. for (int i=0; i<num; i++) 보다는 while (i<num) 이 더 간단하고 직관적이다. 변수 이름이나 코드의 길이가 길어질수록 더욱 그렇다. 한 줄에 내용을 집약해서 넣느냐, 여러 줄에 나눠 넣느냐의 차이이다.
3) 이 외에도 무한 루프를 구현하고 싶은 경우 while (true) 로 쉽게 작성 가능하므로 while을 쓴다.
참고: https://chloe-ki.tistory.com/entry/java-for-while-loop

알고리즘 문제

  • 피자 나눠 먹기 1

내가 쓴 답안

class Solution {
    public int solution(int n) {
        while (n<=100) {
            
            n++;
        }
        int i = n-1/7;
        return i;
        //for (int n=1; n<=100; n++) {
                
         // n-1을 7로 나눠서 나온 몫 +1을 리턴하기
    }
}

도저히 안돼서 풀이 참고해서 풂

class Solution {
    public int solution(int n) {
        int answer = 0;

        if (n % 7 == 0)
            answer = n / 7;
        else
            answer = n / 7 +1;

        return answer;
    }
}
class Solution {
    public int solution(int n) {
        if (n % 7 == 0)
            return n / 7;
        else
            return n / 7 + 1;
    }
}

괜히 for 쓸라다가 엉킨 거 같다.

for을 이용한 다른 사람 풀이

class Solution {
    public int solution(int n) {
        for(int i = 1; i <= 15; i++) {
            if((7*i)/n >= 1) {
                return i;
            }
        }

        return 0;
    }
}

class Solution {
    public int solution(int n) {
        int answer = 0;
        for (int i = 0;i<n;i++){
            if(i%7==0){
                answer++;
            }
        }
        return answer;
    }
}

이건 for문을 사용해서 푸는 문제가 아니였던 걸로..

언제 필요한건지도 잘 공부해야겠다. 필요할 때를 잘 모른다.

profile
백엔드 개발자

0개의 댓글