Swift랑 친해지기/Swift PlayGround

어느 쪽으로 돌아야할까?

데브킹덕 2021. 12. 29. 15:03

func navigateAroundWall() {           // 함수 navigateAroundWall을 만들어
    if isBlocked {                    // 만약에 앞에 막혀있다면
        turnLeft()                    // 왼쪽으로 회전해라
    }  
    if !isBlockedRight {              // 만약에 오른쪽이 막혀있지 않다면
        turnRight()                   // 오른쪽으로 회전해라
        }
    if isOnClosedSwitch {             // 만약에 스위치가 닫혀있다면
            toggleSwitch()            // 스위치를 켜라
        }
        
    moveForward()                     // 앞으로 한칸이동
}


while !isOnGem {                      // 보석이 있지 않는동안
    navigateAroundWall()              // 함수  navigateAroundWall을 실행해라
}
collectGem()                          // 보석을 수집해라

먼저 플레이그라운드에서 설명한 오른속의 법칙?(오른쪽에 손을 붙잡고 간다고) 가정하여 코딩을 생각해보았다.

1. 보석이 있는 곳까지는 보석이 없으며 보석위에 멈추게 하기 위해 while문에 보석이 없을동안 움직임을 반복하도록 하여 아래와 같이 만들었다. 

while !isOnGem{
   내가 만들 함수
}

2. 그 안에 함수를 만들어 계속 반복하도록 해야겠다고 생각했다. 

navigateAroundWall함수를 만들었고,

함수를 정의해야 했다. 

가장먼저 앞이 막혀 있는 부분에서는 왼쪽으로 틀어야 한다고 생각했다. 

if isBlocked{
	turnLeft()
}

 

3. 다음으로는 오른쪽이 막혀있지 않으면  우측으로 틀어야 한다고 생각했다. 

두번째 스위치에서 앞이 막혀 있고 우측이 안막혀 있어 

순서를 잘못 설정하면  이상한 길로 빠지는 상황이 생긴다. 

그래서 앞이 막혀 있는 상황(2번코드)을 먼저 실행하여 왼쪽으로 회전을 하게 하면 오른쪽 벽이 막혀있게 되고,

오른쪽이 막혀있으니 앞으로 진행 할 수 있다.

앞으로 진행하는 코드는 방향을 설정하고 한번씩 수행해 주기 위하여 if문이 모두 끝나고 넣어주었다.

func navigateAroundWall{
	if isBlocked{
    	turnLeft()
	}
    if !isBlockedRight{
    	turnRight()
    }
    moveForward()
}

4. 마지막으로 스위치를 생각해야 되는데 만약에 닫힌 스위치가 있다면 키라는 문장을 넣어주어야 한다. 

스위치를 켜라는 문장은 앞이 막혔을때, 오른쪽이 막혔을때와 위치를 바꿔도 무방하다.

if isOnClosedSwitch {
            toggleSwitch()
        }

 

*Swift Palyground 

*스위프트 플레이그라운드

*코딩배우기1 - 어느 쪽으로 돌아야 할까?

*알고리즘

 

'Swift랑 친해지기 > Swift PlayGround' 카테고리의 다른 글

추적하기 - 코딩배우기2  (0) 2021.12.31
오른쪽, 왼쪽으로 구르기  (0) 2021.12.31
미로정복하기 - 코딩배우기1  (0) 2021.12.28
알고리즘 조절하기  (0) 2021.12.28
오른속의 법칙  (0) 2021.12.28