[JavaScript] label

Hyeon·2024년 1월 9일
0

JavaScript

목록 보기
2/2
post-thumbnail

알고리즘 문제를 풀다가 중첩 반복문을 사용한 코드에서 어떻게 한 번에 깔끔하게 빠져나갈 수 있을까에 대해 고민하게 되었다.

반복문을 종료시킬 때 break나 continue를 사용하면 되지만 그게 outer 반복문까지 적용되려면 일일이 조건부로 처리해줘야 하는 번거로움이 발생한다.

for (let i = 0; i < arr.length - 1; i++) {
	for (let j = i + 1; j < arr.length; j++) {
    	answer = arr.filter((val, index) => ![i, j].includes(index));
    	sum = answer.reduce((a, b) => a + b, 0);
		// 탈출!
        if (sum === 100) break;
		console.log('inner Loop');
	}
	console.log('outer Loop');
}

위와 같은 코드에서 sum이 100이 되었을 때 break로 인해 inner 반복문은 탈출하게 되지만 outer 반복문은 종료되지 못하고 outer 조건이 마칠 때까지 반복문이 실행된다.

하지만 내 의도는 sum이 100이 되었을 때 이 두 반복문을 모두 끝내는 것이었다.

for (let i = 0; i < arr.length - 1; i++) {
	for (let j = i + 1; j < arr.length; j++) {
    	answer = arr.filter((val, index) => ![i, j].includes(index));
    	sum = answer.reduce((a, b) => a + b, 0);
    	// 탈출!
        if (sum === 100) break;
		console.log('inner Loop');
	}
    // 탈출!
    if (sum === 100) break;
	console.log('outer Loop');
}

현재 상황에서는 이렇게 outerLoop에서도 동일한 탈출 조건을 한 번 더 명시하는 것만으로 탈출할 수 있기는 하다. 하지만 중첩 반복문이 여러개일수록 탈출 조건을 위한 중복 코드가 늘어나게 되고 상황에 따라 코드가 지저분해질 수 있다.

그러면 몇 개의 중첩 반복문이 감싸져있든 inner 반복문에서 어떤 조건을 만족하였을 때 모든 outer 반복문을 더 깔끔히 종료하고 싶다면 어떻게 해야 할까?

💡 바로 label을 이용하는 것이다.

반복문에 레이블을 붙이고, break나 continue 구문을 사용해 반복문의 어느 위치에서 작업을 멈추고 어느 위치에서 다시 수행할지를 알려줄 수 있다.

outerLoop: for (let i = 0; i < arr.length - 1; i++) {
  for (let j = i + 1; j < arr.length; j++) {
    answer = arr.filter((val, index) => ![i, j].includes(index));
    sum = answer.reduce((a, b) => a + b, 0);
    if (sum === 100) break outerLoop;
  }
}

위의 코드에서 outerLoop 라는 식별자를 가장 바깥 반복문에 붙여줬다.
sum이 100일 때의 조건에서 위와 같이 작성함으로써 해당 식별자가 붙은 반복문까지 같이 종료될 수 있게 되었다.

label을 붙인 반복문이나 블록이 자주 사용되는 건 아니지만 중첩 반복문 탈출에 대해 고민하다가 새로 알게 됐다.

0개의 댓글