본문 바로가기
Java/알고리즘

while문의 사용에 익숙해져보자

by 티코딩 2023. 10. 25.

알고리즘 문제를 풀다보면, 반복문을 거의 항상 쓴다. 그런데, 나는 항상 for문에만 익숙해져있어서 while문을 잘 안썼다. 그런데 다른분들의 풀이를 보면, 많이 while문을 사용하는걸 볼 수 있었다. 그래서 while문에 대해 공부해보고, 익숙해져보려 한다.

 

먼저 while문의 구조에 대해 보면,

while (조건문) {
    <수행할 문장1>;
    <수행할 문장2>;
    <수행할 문장3>;
    ...
}

이게 기본이다. 조건문이 참인동안 수행할문장들을 수행한다.

 

그래서 처음 while문을 배울때 가장 많이 나오는 예시가 열번찍어 안넘어가는 나무를 구현한 코드다.

int treeHit = 0;
while (treeHit < 10) {
    treeHit++;  // treeHit += 1 로도 표현 가능
    System.out.println("나무를  " + treeHit + "번 찍었습니다.");
    if (treeHit == 10) {
        System.out.println("나무 넘어갑니다.");
    }
}

하지만 실제로 while문을 사용하는 경우를 보자.

public int solution(int[] priorities, int location) {
        int answer = 0;
        Queue<Pair> q = new LinkedList<>();
        for (int i = 0; i < priorities.length; i++) {
            q.add(new Pair(priorities[i],i));
        }

        int order = 0; // 처리 순서를 나타내는 변수

        while (!q.isEmpty()) {
            Pair currentPair = q.poll();
            int current = currentPair.value;
            int idx = currentPair.index;
            boolean isBigger = true;

            for (Pair elementPair : q) {
                if (current < elementPair.value) {
                    isBigger = false; // current 가 작을 때
                    break;
                }
            }

            if (isBigger) {
                order++; // 처리 순서 증가
                if (idx == location) {
                    return order; //여기서 정답이 리턴된다!!
                }
            } else {
                q.add(currentPair); // 작을 때, 큐 뒤에 다시 넣음
            }
        }

        return answer;
    }

내가 풀었던 문제중 하나를 가져와봤다.

while(!q.isEmpty()) 는 q가 빈큐라면 q.isEmpty()는 true를 반환한다. 하지만 "!"가 붙어있으므로, 조건은 q가 빈큐가 아닌동안이 된다. while(true) 이런식으로도 굉장히 많이 쓰인다.

 앞으로 알고리즘에서 반복문을 쓸때 while을 써봐야겠다.

'Java > 알고리즘' 카테고리의 다른 글

N진수 게임  (1) 2023.10.30
압축  (0) 2023.10.26
Lv1로 쉬어가기 (5문제)  (0) 2023.10.25
알고리즘 공부(2) - 자료구조(리스트,세트,맵)  (0) 2023.10.24
k진수에서 소수 개수 구하기  (0) 2023.10.24