- 맨 왼쪽에는 홀수중 가장 작은 숫자가, 그 다음에는 짝수중 가장 작은 숫자가, 그 다음에는 홀수중 두번째로 작은 숫자가, 그 다음에는 짝수중 두번째로 작은 숫자가 입력된다...
package main
import (
"fmt"
"os"
)
func safe(person bool, others []bool) bool {
if others[0] == others[1] && others[1] != person || others[1] == others[2] && others[2] != person {
return false
}
return true
}
func turn(person bool, others []bool, lastWith int) {
if !others[0] && !others[1] && !others[2] {
fmt.Println(others)
os.Exit(0)
}
if !safe(person, others) {
return
}
fmt.Println(others, person)
for i := -1; i < len(others); i++ {
newArray := make([]bool, 0)
newArray = append(newArray, others...)
if i == lastWith {
continue
}
if i == -1 {
turn(!person, newArray, i)
continue
}
if person == newArray[i] {
newArray[i] = !newArray[i]
turn(!person, newArray, i)
}
}
}
func main() {
others := []bool{true, true, true} // 늑대, 토끼, 당근
turn(true, others, -1)
}
// 선정이유 : 재귀함수를 명확하게 알수있는 문제여서 해당문제를 선정했다.
// 빈배열을 선언해서 append 해주는것도, 조건을 걸어 재귀함수가 충족되는 조건도 이 문제가 가장
// 기억에 남는다.
// safe를 해주는 위치, lastwith을 먼저 체크해주는 위치, 그 다음조건을 차례대로 위치시켜주는것도
// 중요하기에 해당 문제가 제일 기억에 남는다.
// 같이 건너온 경우의 조건일경우 continue를 해서 넘어가고, 같이 안건넌경우(사람만 건넌경우)에는
// 사람의 상태값만 변경해서 넘어간다.
'코딩 > Go' 카테고리의 다른 글
(GO/알고리즘) - 강 건너기 (0) | 2023.03.30 |
---|---|
(GO/알고리즘) - 탈출 불가능한 미로 (0) | 2023.03.30 |
(GO/알고리즘) - 샘물 (0) | 2023.03.30 |
(GO/알고리즘) - Jump (0) | 2023.03.30 |
(GO/알고리즘) - Rank (인터페이스) (0) | 2023.03.30 |