고 언어 (Go lang)에서 값의 스왑 (swap) 방법
2023. 6. 5. 08:15ㆍProgramming/JAVA, C++, Go, Rust
- 목차
반응형
Go lang에서 값을 swap 하는 방법에 대해 살펴보겠습니다.
간단하게 다음의 문제를 풀면서 swap을 적용해 보겠습니다.
nums = [3, 2, 1, 4]
위와같은 배열이 있습니다. 배열의 값 1은 배열의 좌측끝으로, 배열 내 값 4는 배열의 우측 끝으로 이동시키고자 합니다.
이때 이동 방법은 인접한 두 개의 값을 서로 swap 하는 방법으로만 이동 할 수 있습니다.
다음과 같이 위 알고리즘 문제를 해결하면서 swap을 적용해 볼 수 있습니다.
func swap(val1 *int, val2 *int) {
temp := *val1
*val1 = *val2
*val2 = temp
}
func semiOrderedPermutation(nums []int) int {
i := 0
one_idx := -1
n_idx := -1
cnt := 0
for idx, val := range nums {
if val == 1 {
one_idx = idx
}
}
i = one_idx
for i > 0 {
swap(&nums[i - 1], &nums[i])
cnt += 1
i -= 1
}
for idx, val := range nums {
if val == len(nums) {
n_idx = idx
}
}
i = n_idx
for i < len(nums) - 1 {
swap(&nums[i], &nums[i + 1])
cnt += 1
i += 1
}
return cnt
}
swap 하는 부분의 코드를 살펴보면, func라는 keyword를 사용한 점과 변수 선언 시 type 보다 변수 명이 먼저 온다는 점을 제외하고는 C 언어의 포인터 문법과 같아 보입니다.
swap 함수는 두 개의 해당 type에 대한 인자를 포인터 타입으로 받아들인 이를 swap 합니다.
func swap(val1 *int, val2 *int) {
temp := *val1
*val1 = *val2
*val2 = temp
}
Go 1.17 version 이후에는 Generics를 지원합니다. 이를 이용하면 다음과 같이 type 별로 swap 함수를 작성하지 않아도 됩니다.
func Swap[T any](a, b, *T) {
temp := *a
*a = *b
*b = temp
}
반응형
'Programming > JAVA, C++, Go, Rust' 카테고리의 다른 글
Go에서 CPU 사용량 측정 (0) | 2023.06.21 |
---|---|
Go 언어에서 reflect로 필드명과 값 획득 방법 (0) | 2023.06.20 |
Kotlin build on Mac (0) | 2023.02.27 |
C++ inline variable (0) | 2023.02.09 |
C++ cast들 (static_cast, reinterpret_cast, dynamic_cast, const_cast) (0) | 2023.02.09 |