이번 주는 Learn to Code 1의 문제를 풀면서 For Loops(For 반복문)에 대해 알아보겠습니다.
1. Using Loops
목표 : 연속되는 행동들을 for loop를 사용하여 반복하고, Gem을 5개 얻기
풀이 :
이 맵에서는 두 칸 앞으로 가서 Gem를 줍고 또 한 칸 가서 순간이동하는 행동을 5번 반복하면 목표를 달성할 수 있습니다. 지난주에 배웠던 함수를 쓰면
func Sequence() {
moveForward()
moveForward()
collectGem()
moveForward()
}
Sequence()
Sequence()
Sequence()
Sequence()
Sequence()
가 되겠죠. 그런데 for loops를 이용하면 이걸 간단하게 해결할 수 있습니다.
답 :
for i in 1 ... 5 {
moveForward()
moveForward()
collectGem()
moveForward()
}
2. Looping All the Sides
목표 : for loop를 사용해서 Gem 4개를 얻기
풀이 :
초반에 세팅된 명령어들은 이러합니다.
moveForward()
collectGem()
moveForward()
moveForward()
moveForward()
turnRight()
이것을 네 번 반복하면 미션을 성공할 수 있을 것 같네요.
for만 입력해도 위와 같이 for loops 구문이 자동으로 완성되어 나오는데요,
number에는 반복할 숫자(이번에는 4번이니까 4를 입력합니다)
code에는 이미 입력되어 있는 명령어를 붙여 넣어주세요.
답 :
for i in 1 ... 4 {
moveForward()
collectGem()
moveForward()
moveForward()
moveForward()
turnRight()
}
3. To the Edge and Back
목표 : for loop를 이용해서 스위치 4개를 켜기
풀이 :
약건 머리를 써야 하는 문제입니다.
저는 처음에
moveForward()
moveForward()
toggleSwitch()
turnLeft()
moveForward()
moveForward()
turnLeft()
를 for loop에 넣었는데요, 이렇게 하면 맵의 1/4만 뱅글뱅글 돌고 스위치도 처음과 다를 바가 없어집니다.
그래서 1 시작점으로 돌아오되 2 향하는 방향은 다른 곳을 보도록 만들어야 Byte가 맵의 모든 면을 돌아다니면서 스위치를 켭니다.
답 :
for i in 1 ... 4 {
moveForward()
moveForward()
toggleSwitch()
turnLeft()
moveForward()
moveForward()
turnLeft()
moveForward()
moveForward()
turnLeft()
moveForward()
moveForward()
}
4. Loop Jumper
목표 : 반복되는 패턴을 찾고 for loop를 이용해서 Gem 5개 얻기
힌트 :
반복되는 패턴을 찾기가 힘들면 일단은 넣지 말고 처음부터 끝까지 쭉 다 입력해봅시다. 그럼 패턴을 발견하기가 더 쉬워집니다. 쭉 이어서 쓰면 뭐가 뭔지 헷갈리니까 Gem을 얻을 때를 기점으로 띄어쓰기해서 봅시다.
풀이 :
첫 번째 Gem 이후의 2~5번째 Gem을 얻을 때는 아래의 패턴이 반복되는 것을 알 수 있습니다.
turnRight()
moveForward()
turnLeft()
moveForward()
moveForward()
collectGem()
이제 이걸 for loop에 넣으면 되겠죠.
답 :
moveForward()
turnLeft()
moveForward()
moveForward()
collectGem()
for i in 1 ... 4 {
turnRight()
moveForward()
turnLeft()
moveForward()
moveForward()
collectGem()
}
5. Branch Out
목표 : 함수와 for loop를 이용하여 스위치 3개를 켜기
풀이 :
1) 이번 맵에서는 앞으로 가는 행동이 7번 반복됩니다. 지난주에 배웠던 함수를 이용해서 moveForward()를 여러 번 입력해야 하는 귀찮음을 극복해봅시다.
func moveSeven() {
moveForward()
moveForward()
moveForward()
moveForward()
moveForward()
moveForward()
moveForward()
}
2) 스위치를 켜고 돌아 나오는 행동도 함수로 설정해둬도 됩니다. 함수 설정이 귀찮으면 turnAround() 자리에 turnRight()를 두 번 입력해도 됩니다.
func turnAround() {
turnRight()
turnRight()
}
답 :
func moveSeven() {
moveForward()
moveForward()
moveForward()
moveForward()
moveForward()
moveForward()
moveForward()
}
func turnAround() {
turnRight()
turnRight()
}
for i in 1 ... 3 {
moveForward()
moveForward()
turnRight()
moveSeven()
toggleSwitch()
turnAround()
moveSeven()
turnRight()
}
6. Gem Farm
목표 : 함수와 for loop를 이용하여 Gem 6개를 얻고 스위치 6개를 켜기
힌트 : 마지막 위치가 중앙(주황색 표시)에 오도록 패턴을 설정하면 편하겠죠.
풀이 :
1) Gem을 줍든 스위치를 켜든 돌아 나오는 액션은 공통되기 때문에 맨 처음에는 turnAround() 함수부터 설정해줘야 합니다.
func turnAround() {
turnRight()
turnRight()
moveForward()
moveForward()
}
2) Gem을 두 번 얻는 행동(CollectTwoGem; 줄여서 CTG)과
스위치를 두 번 켜는 행동(ToggleTwoSwitch; 줄여서 TTS)도 함수로 만들어둡시다.
답 :
func turnAround() {
turnRight()
turnRight()
moveForward()
moveForward()
}
func CTG() {
moveForward()
collectGem()
moveForward()
collectGem()
}
func TTS() {
moveForward()
toggleSwitch()
moveForward()
toggleSwitch()
}
for i in 1 ... 3 {
turnLeft()
TTS()
turnAround()
CTG()
turnAround()
turnRight()
moveForward()
}
7. Four Stash Sweep
목표 : 함수와 for loop를 이용해서 Gem 16개를 얻기
풀이 : 가장 왼쪽에 있는 Gem부터 오른쪽까지 차례대로 이동한다고 생각하고 명령어를 입력해봤는데요, 돌아 나오는 액션(turnAround)과 Gem을 얻는 액션(Moveforward+Collectgem)이 계속해서 반복되더군요. 그리고 왼쪽으로 돌아서 잼을 줍는 행동도 두 번 반복되고요. 그래서 이걸 먼저 함수로 설정해둔 다음에 for loop 구문을 작성했습니다.
답 :
func turnAround() {
turnLeft()
turnLeft()
}
func MC() {
moveForward()
collectGem()
}
func MLMC() {
moveForward()
turnLeft()
MC()
}
for i in 1 ... 4 {
MLMC()
turnAround()
MC()
turnLeft()
MC()
turnAround()
MLMC()
moveForward()
}
마치며
코딩은 결국 문제를 해결하는 능력이 관건이라는 말을 어디서 들은 적이 있는데, 갈수록 공감됩니다. 함수나 반복문 같은 개념을 익히는 건 생각보다 어렵지 않은데(배운 지 3주차된 초심자의 근자감일 수도 있지만) 답이 되는 패턴을 찾아내는 게 까다롭네요. 수학 문제 푸는 거랑 비슷한 것 같기도 합니다. 다만 코딩은 한 가지 정답만 있는 게 아니고 문제 해결로 향하는 다양한 길을 찾아낼 수 있다는 점이 흥미롭습니다. 그럼, 다음 이 시간에 다시 만납시다.
'IT' 카테고리의 다른 글
스위프트 플레이그라운드(Swift Playgrounds) Learn to Code 1 Ch. 4 Conditional Code 풀이 (0) | 2021.03.06 |
---|---|
특수문자 모음 (0) | 2021.02.28 |
네이버 검색 누락과 해결을 위한 발버둥 (0) | 2021.02.24 |
스위프트 플레이그라운드(Swift Playgrounds) Learn to Code 1 Ch. 2 Functions 풀이 (0) | 2021.02.20 |
스위프트 플레이그라운드(Swift Playgrounds) Learn to Code 1 Ch. 1 Commands 풀이 (0) | 2021.02.14 |
댓글