알고리즘 문제를 풀다보면, 반복문을 거의 항상 쓴다. 그런데, 나는 항상 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 |