고민할 사항🤔
주어진 문제를 정리해보면
1. 보석은 3개만 수집되어야한다.
2. 스위치는 4개만 작동되어야한다.
Flow 생각
1. 보석을 담은 변수와 , 스위치 카운터를 담은 변수가 있어야한다.
var gemCounter = 0
var switchCounter = 0
2. 하나씩 추가하며 조건에 충족하면 더이상 보석을 수집하거나 스위치를 누르면 안된다.
while gemCounter < 3 || switchCounter < 4 {
//조건을 만족할때까지 실행될 코드 작성
}
3. 움직임
- 왼쪽이 막혀있지 않다면 왼쪽으로 돌기
- 오른쪽이 막혀있지 않다면 오른쪽으로 돌기
- 그 외의 경우에는 직진
func moveFlow() {
if !isBlockedLeft {
turnLeft()
moveForward()
} else if !isBlockedRight {
turnRight()
moveForward()
} else {
moveForward()
}
}
- 보석을 담는 변수와 스위치카운터를 담는 변수에 충족하지 않을 시 각각 보석을 수집하고 스위치를 켜야함
while gemCounter < 3 || switchCounter < 4 {
if !isBlockedLeft {
moveFlow()
getGem()
openSwitch()
} else if !isBlockedRight{
moveFlow()
getGem()
openSwitch()
} else {
moveFlow()
getGem()
openSwitch()
}
}
코드
코드를 작성했을 때 두가지 방향으로 생각했다.
1. 보석을 담는 로직
2. 스위치를 켜는 로직
이 두가지 로직을 분리하고 while문에 작용 시키는 방향으로 설정함 -> 단일 책임 원칙
전체코드
//변수 설정
var gemCounter = 0
var switchCounter = 0
//보석 수집 로직
func getGem() {
if isOnGem && gemCounter < 3 {
collectGem()
gemCounter = gemCounter + 1
}
}
//스위치 on 로직
func openSwitch() {
if isOnClosedSwitch {
toggleSwitch()
switchCounter = switchCounter + 1
}
}
//움직임 로직
func moveFlow() {
if !isBlockedLeft {
turnLeft()
moveForward()
} else if !isBlockedRight {
turnRight()
moveForward()
} else {
moveForward()
}
}
//while문으로 조건에 만족할때까지 함수 호출
while gemCounter < 3 || switchCounter < 4 {
if !isBlockedLeft {
moveFlow()
getGem()
openSwitch()
} else if !isBlockedRight{
moveFlow()
getGem()
openSwitch()
} else {
moveFlow()
getGem()
openSwitch()
}
}
'🍎swift > [Playground]코딩배우기2' 카테고리의 다른 글
[Playground 코딩배우기2] 옳바른 포탈 설정하기 (0) | 2023.12.24 |
---|---|
[playGround 코딩배우기 2] 스위치 모으기 (0) | 2023.12.24 |
[Playground 코딩배우기2] 동일한 값 확인하기 (0) | 2023.12.24 |