λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Programming/Go lang

[go lang] λ°°μ—΄, 슬라이슀, λ§΅

정적 λ°°μ—΄

λ°°μ—΄μ˜ νƒ€μž… 이름은 [#count]<type> ν˜•νƒœλ‘œ int μ›μ†Œ 5개λ₯Ό λ‹΄λŠ” λ°°μ—΄μ˜ νƒ€μž… 이름은 [5]int, bool μ›μ†Œ 100개λ₯Ό λ‹΄λŠ” λ°°μ—΄μ˜ νƒ€μž… 이름은 [100]bool이 λœλ‹€. νƒ€μž… 이름 뒀에 {와 }둜 μ΄ˆκΈ°ν™” 리슀트λ₯Ό 쀄 수 μžˆλ‹€.

func main() {
    var array [5]int
    even := [4]int{2, 4, 6, 8}
    vertexes := [3]Vertex{{1, 2}, {2, 3}}
}

슬라이슀

슬라이슀의 νƒ€μž… 이름은 []<type> ν˜•νƒœλ‘œ int μ›μ†Œλ₯Ό λ‹΄λŠ” 슬라이슀의 νƒ€μž… 이름은 []int, bool μ›μ†Œλ₯Ό λ‹΄λŠ” 슬라이슀의 νƒ€μž… 이름은 []bool이 λœλ‹€. λ°°μ—΄κ³Ό 달리 전체 μ›μ†Œ 개수λ₯Ό μ§€μ •ν•˜μ§€ μ•ŠλŠ”λ‹€.

func main() {
    // λ°°μ—΄λ‘œλΆ€ν„° λ²”μœ„λ₯Ό μ§€μ •
    primes := [5]int{2, 3, 5, 7, 11}
    s := primes[:3]

    // 슬라이슀 λ¦¬ν„°λŸ΄λ‘œ μ΄ˆκΈ°ν™”
    vertexes := []Vertex{{1, 2}, {2, 3}, {3, 4}}
    // μ›μ†Œλ₯Ό μΆ”κ°€, λ©”λͺ¨λ¦¬ λΆ€μ‘±ν•˜λ‹€λ©΄ μžλ™μœΌλ‘œ ν• λ‹Ή
    vertexes = append(vertexes, {7, 6}, {2, 3})

    // range ν‚€μ›Œλ“œλ₯Ό 톡해 μΈλ±μŠ€μ™€ μ›μ†Œμ˜ 볡사본을 μˆœμ„œλŒ€λ‘œ 쑰회
    for i, v := range vertexes {
        fmt.Println(i, v)
    }

    // make(type, count)둜 μƒˆλ‘œμš΄ 슬라이슀
    ticTacToe := make([][]bool, 3)
    for i := range ticTacToe {
        ticTacToe = make([]bool, 3)
    }
}

λ§΅

맡의 νƒ€μž… 이름은 map[KeyType]ValueType 이닀. var m map[string]Vecter 와 같은 μ„ μ–Έλ§ŒμœΌλ‘œ λ§΅ m을 λ°”λ‘œ μ΄μš©ν•  수 μ—†λ‹€. 맡을 μ΄μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” makeλ₯Ό μ΄μš©ν•΄ 맡을 ν• λ‹Ήλ°›κ±°λ‚˜ λ§΅ λ¦¬ν„°λŸ΄μ„ μ΄μš©ν•΄ μ„ μ–Έκ³Ό ν•¨κ»˜ μ΄ˆκΈ°ν™”ν•˜μ—¬μ•Ό ν•œλ‹€.

func main() {
    var m map[string]Vertex
    m = make(map[string]Vertex)

    student := map[string]Student{
        "A000001": {"Jiseok Son", 98},
        "A000002": {"Who Is", 80}
    }
    delete(student, "A000002")

    s, ok := student["A000002"] // nil, false
}

예제: μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 μ•Œκ³ λ¦¬μ¦˜

func ListPrimes(upperLimit int) {
    isPrime := make([]bool, upperLimit+1)
    for i := range isPrime {
        isPrime[i] = true
    }
    for i := 2; i*i <= upperLimit; i++ {
        if !isPrime[i] {
            continue
        }
        for j := i * i; j <= upperLimit; j += i {
            isPrime[j] = false
        }
    }
    for i := 2; i <= upperLimit; i++ {
        if isPrime[i] {
            fmt.Printf("%d ", i)
        }
    }
    fmt.Println()
}

예제: μŠ€λ„μΏ  풀이 λ°±νŠΈλž˜ν‚Ή

func NumAvailable(board [][]int, y, x, n int) bool {
    for i := range 9 {
        if board[y][i] == n || board[i][x] == n {
            return false
        }
    }
    yb, xb := y/3*3, x/3*3
    for i := range 3 {
        for j := range 3 {
            if board[yb+i][xb+j] == n {
                return false
            }
        }
    }
    return true
}

func SolveSudoku(board [][]int, y, x int) bool {
    for ; y < 9; y++ {
        for ; x < 9; x++ {
            if board[y][x] != 0 {
                continue
            }
            for n := 1; n <= 9; n++ {
                if !NumAvailable(board, y, x, n) {
                    continue
                }
                board[y][x] = n
                if SolveSudoku(board, y, x) {
                    return true
                }
                board[y][x] = 0
            }
            return false
        }
        x = 0
    }
    return true
}

'Programming > Go lang' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[go lang] μΈν„°νŽ˜μ΄μŠ€  (1) 2024.07.13