중첩 루프 탈출하기
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨. 68개 중 2번째.
중첩 루프를 사용할 때 일반적인 break 문은 가장 안쪽 루프만 빠져나옵니다. 하지만 Go는 레이블을 제공하므로 바깥쪽 루프에서 바로 빠져나올 수 있어 복잡한 루프 구조를 정밀하게 제어할 수 있습니다.
레이블은 반복문 앞에 놓는 콜론이 뒤따르는 식별자입니다. 레이블 이름 뒤에 break를 사용하면 중첩 반복문 안에서도 해당 반복문을 빠져나올 수 있습니다.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 {
break outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
}이 예시에서는 i == 1 && j == 1 조건이 충족되면 break outer가 내부 루프와 외부 루프를 모두 즉시 종료합니다. 찾으려는 항목을 발견하는 즉시 검색을 완전히 멈추고 싶을 때, 2차원 데이터 구조를 검색하는 데 특히 유용합니다.
챌린지
쉬움이 챌린지에서는 2차원 그리드를 검색할 때 레이블이 지정된 break 문을 사용해 중첩 루프를 빠져나오는 연습을 합니다. 그리드에서 특정 숫자를 찾아, 찾는 즉시 검색을 중단해야 합니다.
다음 두 가지 입력을 받습니다.
"rows,cols"형식의 그리드 차원을 나타내는 문자열(예:"3,4")- 검색할 대상 숫자를 나타내는 문자열(예:
"7")
다음과 같은 숫자 2차원 그리드가 제공됩니다.
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}해야 할 일은 다음과 같습니다.
- 위 코드에서 이미 읽어 둔 값인
rows와cols(검색할 그리드의 범위),target,grid를 사용합니다. - 레이블이 지정된
break를 사용하는 중첩 루프로 그리드를 검색합니다. - 대상 숫자를 찾으면
"Found [target] at position ([row], [col])"을 출력하고, 레이블이 지정된 break를 사용해 두 루프를 즉시 빠져나옵니다. - 대상을 찾지 못한 채 검색을 마치면
"Target [target] not found"를 출력합니다.
위치는 0부터 시작하는 인덱스로 표시해야 합니다(첫 번째 행은 0, 첫 번째 열은 0).
직접 해보기
// TODO: 아래에 코드를 작성하세요
// 레이블이 붙은 break와 중첩 반복문을 사용해 대상을 찾으세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Go 컴파일러