Swift Playgrounds 코딩 배우기 2 > 유형 > 세상의 가장자리
문제를 해결하는데 은근히 많은 시간이 소요되었고, 작성한 코드도 그닥 마음에 들지 않는 문제였다.
제시된 조건_
여러 해결 방법을 시도하여 가장 효과적인 방법을 찾아 보세요.
효과적인 코드를 작성하면 프로그램이 더 빠르게 실행되고 사람들의 앱 사용 만족도가 높아질 뿐 아니라 배터리 사용 시간도 개선됩니다.
크게 4구역으로 나누어 모든 구역을 한 번씩만 방문하는 것을 목표로 하였다.
내가 생각하는 높은 효율은 한 번 방문한 곳은 다시 방문하지 않도록 하는 것이었기 때문이다.
+
어려움을 겪었던 부분은 2번 구역에서 3번 구역으로 넘어가는 구간이다.
2번 구역의 보석을 모두 수집하고 다시 오렌지 포탈을 열어 1번에서 3번으로 가는 방법도 생각해봤는데,
1->3이든 2->3 이든 전체 흐름에서 코드를 수정해야한다는 사실은 같았기 때문에
이동거리가 더 짧은 2->3을 선택하게 되었다.
게다가 1->3으로 가게되면 진행방향에 따라서 오른쪽 방향으로 향하였을 때
보석이 없기 때문에 다른 보석을 수집할 수 없게된다.
+
2->3으로 넘어가는 부분은 다소 부자연스러운 코드를 쓰게 되었다.
임의로 개입하여 이동 방향을 바꾸어야 했기 때문이다.
이러한 개입은 진행 중에 딱 한 번 필요했기 때문에 비효율적이지만 oneTimeSwitch 라는 변수를 선언하였다.
oneTimeSwitch 라는 변수에 0이라는 값을 주고 한 번 실행되면 1의 값을 같도록 하여 반복실행을 피했다.
+
조건문에 gemCounter와 SwitchCounter로 제약을 주렁주렁 달아놓은 것은
이 상황에서만 해당되는 것이기 때문에 범용성이 떨어지는 코드라고 생각한다.
내 코드_
orangePortal.isActive = false
greenPortal.isActive = false
var switchCounter = 0
var gemCounter = 0
var oneTimeSwitch = 0
turnRight()
moveForward()
while switchCounter < 6 || gemCounter < 6{
if !isBlockedRight {
turnRight()
}
if isOnClosedSwitch {
switchCounter += 1
toggleSwitch()
turnLeft()
turnLeft()
} else if isOnGem {
gemCounter += 1
collectGem()
turnLeft()
turnLeft()
}
if switchCounter == 2 && gemCounter == 0{
orangePortal.isActive = true
} else {
orangePortal.isActive = false
}
if gemCounter == 6 && switchCounter == 2 {
greenPortal.isActive = true
} else {
greenPortal.isActive = false
}
if gemCounter == 4 && oneTimeSwitch == 0 {
moveForward()
turnLeft()
oneTimeSwitch = 1
}
moveForward()
}
사담_
이번 코드는 상당히 자신없는 코드입니다.
문제가 정말로 안풀릴때 참고만 해주세요.
저도 .... 더 좋은 코드를 생각해보겠습니다 !
'Coding > Swift' 카테고리의 다른 글
만들고 싶은 어플이 생겨서 메모앱 튜토리얼 공부 (0) | 2023.02.15 |
---|---|
Playgrounds 코딩 배우기 2 > 매개변수 > 트윈 픽스 (0) | 2022.05.07 |
Playgrounds 코딩 배우기 2 > 유형 > 올바른 포털 설정하기 (0) | 2022.05.03 |
Playgrounds 코딩 배우기 1 > 알고리즘 > 오른쪽, 왼쪽으로 구르기 (0) | 2022.05.02 |
Playgrounds 코딩 배우기 1 > 알고리즘 > 오른손 법칙 (0) | 2022.04.29 |