중첩 루프 탈출하기
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 2번째.
중첩된 루프를 작업할 때, 일반적인 break 문은 가장 안쪽의 루프만 빠져나옵니다. 하지만 Go는 외부 루프를 직접 빠져나올 수 있게 해주는 레이블(label)을 제공하여, 복잡한 루프 구조를 정밀하게 제어할 수 있게 해줍니다.
레이블은 루프 앞에 배치하는, 콜론이 뒤따르는 식별자입니다. 그런 다음 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는 내부 루프와 외부 루프를 모두 즉시 종료합니다. 이는 원하는 항목을 찾은 후 검색을 완전히 중단하고자 하는 2D 데이터 구조를 검색할 때 특히 유용합니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움이 챌린지에서는 레이블이 지정된 break 문을 사용하여 2D 그리드를 검색할 때 중첩된 루프를 종료하는 연습을 합니다. 그리드에서 특정 타겟 숫자를 찾아야 하며, 숫자를 찾는 즉시 검색을 중단해야 합니다.
두 개의 입력을 받게 됩니다:
"rows,cols"형식의 그리드 크기를 나타내는 문자열 (예:"3,4")- 검색할 타겟 숫자를 나타내는 문자열 (예:
"7")
다음과 같은 숫자로 구성된 2D 그리드가 제공됩니다:
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
}당신의 과제는 다음과 같습니다:
- 첫 번째 입력에서 차원(dimensions)을 파싱하여 검색할 행과 열의 수를 결정합니다.
- 두 번째 입력에서 타겟 숫자를 파싱합니다.
- 레이블이 지정된
break와 함께 중첩 루프를 사용하여 그리드를 검색합니다. - 타겟 숫자를 찾으면,
"Found [target] at position ([row], [col])"를 출력하고 레이블이 지정된 break를 사용하여 즉시 두 루프를 모두 종료합니다. - 타겟을 찾지 못하고 검색을 마친 경우,
"Target [target] not found"를 출력합니다.
위치는 0부터 시작하는 인덱스(첫 번째 행은 0, 첫 번째 열은 0)를 사용하여 보고해야 합니다.
치트 시트
레이블을 사용하면 중첩된 루프 내부에서 외부 루프를 빠져나올 수 있습니다. 레이블은 루프 앞에 위치하며 식별자 뒤에 콜론이 붙는 형태입니다.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if condition {
break outer // 두 루프를 모두 종료합니다
}
}
}break 뒤에 레이블 이름을 사용하여 깊게 중첩된 구조에서도 특정 루프를 종료할 수 있습니다. 이는 2D 데이터를 검색할 때 대상을 찾으면 즉시 전체 검색을 중단하고 싶을 때 유용합니다.
직접 해보기
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// 입력 읽기
var dimensions string
var targetStr string
fmt.Scanln(&dimensions)
fmt.Scanln(&targetStr)
// 차원 파싱
dimParts := strings.Split(dimensions, ",")
rows, _ := strconv.Atoi(dimParts[0])
cols, _ := strconv.Atoi(dimParts[1])
// 대상 숫자 파싱
target, _ := strconv.Atoi(targetStr)
// 미리 정의된 그리드
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}
// TODO: 아래에 코드를 작성하세요
// 대상을 찾기 위해 레이블이 지정된 break와 함께 중첩 루프를 사용하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.