Swift Playgrounds 코딩 배우기 1 > 알고리즘 > 오른쪽, 왼쪽으로 구르기
목표 : 보석을 전부 줍고, 스위치를 모두 On상태로 만들 것.
핵심 : 보석은 왼쪽과 앞이 막힌 코너에 있고, 스위치는 오른쪽과 앞이 막힌 코너에 있다는 것을 이용해야 한다.
내 코드_
turnLeft()
while !(isBlocked && isBlockedLeft && isBlockedRight) {
if isBlockedLeft && isBlocked {
turnRight()
moveForward()
collectGem()
turnRight()
moveForward()
collectGem()
} else if isBlockedRight && isBlocked {
turnLeft()
moveForward()
if isOnClosedSwitch {
toggleSwitch()
}
turnLeft()
moveForward()
if isOnClosedSwitch {
toggleSwitch()
}
}
moveForward()
}
+
처음을 turnLeft()로 시작한 이유는 앞으로 있을 보석과 마주치는 상황과 시작 상황을 통일하기 위함이다.
+
while의 조건문
처음에는 !isOnOpenSwitch() 로 했다가 먹히지 않는 것을 발견하고 변경하였다.
막연히 마지막에 있는 스위치가 오픈되어 있는 곳까지 가면 되겠지 했는데
open switch를 지나갈 때 코드의 진행 위치가 If 조건문 안에 있어서 while의 제한조건이 발동되지 않았다.
여기서 break로 나올 수 도 있지만 최대한 쓰지 않고 푸는 방향으로 코드를 작성해보았다.
// 그 전에 아직 swift에서 break를 어떻게 쓰는지 모른다.
그러다보니 !(isBlocked && isBlockedLeft && isBlockedRight) 라는 긴 코드를 써버렸다....
+
각 if문과 else if문 안에서 동일한 내용이 두 번 반복되기 때문에 반복문을 쓸 수 있었지만
두 번의 반복에 반복문을 써 중첩 반복문을 만들고 싶지 않아 그냥 썼다.
// 아무래도 중첩반복문이 들어가면 시간복잡도가 늘어나니까. (이 정도 코드는 영향이 없겠지만)
'Coding > Swift' 카테고리의 다른 글
Playgrounds 코딩 배우기 2 > 유형 > 세상의 가장자리 (0) | 2022.05.05 |
---|---|
Playgrounds 코딩 배우기 2 > 유형 > 올바른 포털 설정하기 (0) | 2022.05.03 |
Playgrounds 코딩 배우기 1 > 알고리즘 > 오른손 법칙 (0) | 2022.04.29 |
Playgrounds 코딩 배우기 1 > 조건 코드 > 박스 안에서 (0) | 2022.04.22 |
Playgrounds 코딩 배우기 1 > 조건 코드 > 스마트하게 함수 정의하기 (0) | 2022.04.22 |