본문 바로가기
Coding/Swift

Playgrounds 코딩 배우기 1 > 조건 코드 > 스마트하게 함수 정의하기

Swift Playgrounds 코딩 배우기 1 > 조건 코드 > 스마트하게 함수 정의하기

 

목표 : 함수, 루프, 조건식을 사용하여 보석을 수집하거나 스위치를 작동시켜 보세요. (전부작동/전부수집)

 

제시된 조건1_

if구문을 많이 사용하여 퍼즐을 해결할 수도 있지만 그보다 나은 방법이 있습니다. 

퍼즐을 단순한 패턴으로 먼저 나누어 보세요. 퍼즐에는 경로가 크게 3가지가 있습니다. 

각 경로에는 2개의 보석이나 스위치가 존재할 확률이 있습니다. 

 

제시된 조건2_

1. if 구문을 사용하여 타일의 내용을 확인하는 collectOrToggle() 함수를 정의합니다.

2. 함수를 정의한 다음, collectOrToggle() 및 다른 명령을 호출하여 퍼즐을 해결합니다. 

 

퍼즐 이미지

풀이_

퍼즐을 단순한 패턴으로 먼저 나누어 보세요. 퍼즐에는 경로가 크게 3가지가 있습니다.

각 경로에는 2개의 보석이나 스위치가 존재할 확률이 있습니다.

== 직진을 반복할 수 있는, 항목을 2개 포함하는 3가지 묶음

 

 

 

1. if 구문을 사용하여 타일의 내용을 확인하는 collectOrToggle() 함수를 정의합니다.

func collectOrToggle() {
	if isOnClosedSwitch {
		toggleSwitch()
	} else if isOnGem {
		collectGem()
	}
}

 

2. 함수를 정의한 다음, collectOrToggle() 및 다른 명령을 호출하여 퍼즐을 해결합니다. 

for i in 1 ... 4 {
    moveForward()
    collectOrToggle()
}
turnLeft()
moveForward()
moveForward()
turnLeft()

for i in 1 ... 4 {
    moveForward()
    collectOrToggle()
}
turnRight()
moveForward()
turnRight()

for i in 1 ... 4 {
    moveForward()
    collectOrToggle()
}

사족_

Swift 언어에 익숙하지 않아서 더 좋은 코드가 있을 것 같은데 모르겠다. 

위 코드에서 collectOrToggle() 함수에 4번 반복하는 반복문을 넣기에는 수집과 토글이라는 함수의 목적에서 벗어나게 된다.

그렇다고 해서 따로 반복문을 함수로 빼버리면 범용성이 떨어지는 함수가 되기 때문에 적절하지 않다고 생각하여 밑에 주렁주렁 길게 코드를 늘여버렸다. 

 

사족2_

이는 정답코드가 아닌 수많은 통과 코드 중 하나인 코드입니다.