Menu
CoddyTech

Keluar dari Perulangan Bersarang

Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 2 dari 68.

Saat bekerja dengan perulangan bersarang, pernyataan break biasa hanya keluar dari perulangan terdalam. Namun, Go menyediakan label yang memungkinkan kamu keluar langsung dari perulangan luar, sehingga kamu dapat mengendalikan struktur perulangan yang kompleks dengan tepat.

Label adalah identifier yang diikuti titik dua dan kamu letakkan sebelum perulangan. Kamu kemudian dapat menggunakan break yang diikuti nama label untuk keluar dari perulangan tertentu itu, bahkan dari dalam perulangan bertingkat.

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)
    }
}

Dalam contoh ini, saat kondisi i == 1 && j == 1 terpenuhi, break outer langsung keluar dari perulangan bagian dalam dan bagian luar. Ini sangat berguna saat mencari di dalam struktur data 2D, ketika kamu ingin menghentikan seluruh pencarian setelah menemukan yang kamu cari.

challenge icon

Tantangan

Mudah

Dalam tantangan ini, kamu akan berlatih menggunakan pernyataan break berlabel untuk keluar dari perulangan bersarang saat menelusuri grid 2D. Kamu perlu menemukan angka target tertentu di dalam grid dan langsung berhenti mencari begitu menemukannya.

Kamu akan menerima dua input:

  • String yang mewakili dimensi grid dengan format "rows,cols" (misalnya, "3,4")
  • String yang mewakili angka target yang dicari (misalnya, "7")

Kamu diberikan grid angka 2D berikut:

grid := [][]int{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
}

Tugasmu adalah:

  1. Uraikan dimensi dari input pertama untuk menentukan jumlah baris dan kolom yang akan ditelusuri
  2. Uraikan angka target dari input kedua
  3. Gunakan perulangan bersarang dengan break berlabel untuk menelusuri grid
  4. Saat menemukan angka target, cetak "Found [target] at position ([row], [col])" dan langsung keluar dari kedua perulangan menggunakan break berlabel
  5. Jika kamu menyelesaikan pencarian tanpa menemukan target, cetak "Target [target] not found"

Posisi harus dilaporkan menggunakan indeks berbasis 0 (baris pertama adalah 0, kolom pertama adalah 0).

Coba sendiri

package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    // Baca input
    var dimensions string
    var targetStr string
    fmt.Scanln(&dimensions)
    fmt.Scanln(&targetStr)
    
    // Uraikan dimensi
    dimParts := strings.Split(dimensions, ",")
    rows, _ := strconv.Atoi(dimParts[0])
    cols, _ := strconv.Atoi(dimParts[1])
    
    // Uraikan angka target
    target, _ := strconv.Atoi(targetStr)
    
    // Grid yang sudah ditentukan
    grid := [][]int{
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
    }
    
    // TODO: Tulis kodemu di bawah ini
    // Gunakan perulangan bersarang dengan break berlabel untuk mencari target
    
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Go online