스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (8) - 카렐 기둥 수리

스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (8) - 카렐 기둥 수리 본문

Developer Projects

스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (8) - 카렐 기둥 수리

KRONNA 2016.07.01 10:03


다시 한번 카렐과 함께 문제를 풀어볼 준비가 되셨나요? 이번 과제는 신문을 가져오는것 과제보다 훨씬 복잡하지만 그만큼 더 재밌답니다. 같이 바로 시작해봐요!




스탠포드의 중심에 위치한 "메인쿼드"에는 이런 기둥들이 세워져 있답니다. 하지만 1989년, 스탠포드에 지진이 일어나서 이 기둥들이 부분적으로 파손되었습니다. 이대로 놔둔다면 학생들이 안전하지 않겠죠? 여러분이 얼른 카렐을 이용해서 이 기둥들을 수리해주세요! 이클립스를 실행하고 오른쪽 사이드바에서 src 폴더 -> (default package) -> StoneMason.java를 열면 "기둥 수리" 과제를 시작하실 수 있습니다.




카렐 세계에서 스탠포드의 메인쿼드는 이렇게 표현되어 있습니다. 비퍼로 만들어진 기둥들이 천장을 지지하고 있지요. 여러분은 왼쪽 사진에 보이는 비퍼가 부족한 기둥들에 비퍼들을 채워넣어서 오른쪽 사진에 보이는 안전한 기둥들을 만들어내야 합니다.


하지만 스탠포드 메인쿼드에는 위에 보이는 기둥 4개 말고도 여러개의 기둥들이 있습니다. 그렇기 때문에 여러분의 프로그램은 위에 보이는 카렐 세계는 물론이고 다른 종류의 카렐 세계에서도 기둥 수리를 완벽히 해낼 수 있어야 한답니다. 기둥 수리가 필요한 다른 카렐 세계들은 참고로 상단바에 있는 검은색 달리는 사람 아이콘으로 StoneMason을 실행하고 "Load World" 버튼을 누른 뒤 불러올 수 있습니다. StoneMason.w, SampleQuad1.w, 그리고 SampleQuad2.w 이 3개의 세계에서 완벽히 작동하는 하나의 프로그램을 만들어주세요.




시작하기 전 드릴 힌트가 몇가지 있습니다.

1. 카렐이 모든 기둥 수리를 마쳤을 때 어디에 서있는지어디를 보고있는지상관 없습니다.

2. 카렐은 언제나 왼쪽 아래 구석에서 동쪽 (화면 오른쪽)을 보고 시작합니다.

3. 카렐은 가방 속에 무한개의 비퍼를 가지고 있습니다.

4. 기둥들은 언제나 정확히 4칸씩 떨어져 있습니다. 1번, 5번, 9번.. 애브뉴에 위치해있죠. 

5. 마지막 기둥은 언제나 오른쪽 벽 바로 앞에 있습니다. 예를 들어 위 예제에는 13번 기둥이 마지막 기둥이니 13번 기둥 바로 오른쪽에는 벽이 있죠.

6. 모든 기둥들은 위에 벽으로 막혀있습니다. 카렐은 기둥들이 전부 5칸 높이라거나 혹은 기둥들이 모두 똑같은 높이라고 가정해선 안 됩니다.

7. 이미 비퍼가 있는 곳에는 비퍼를 또 내려놓으면 안 됩니다. 


그럼 한번 재밌게 풀어보세요! ^^


이 과제는 스탠포드 대학교의 정규 수업에서 실제로 사용되는 과제이기 때문에 풀이를 인터넷에 공개할 수는 없습니다. 하지만 3개의 세계에서 완벽히 작동한다면 스스로 확인해보실 수 있겠죠! 그래도 다른 사람이 검사해주었으면 좋겠다고 생각하신다면 제게 이메일로 StoneMason.java 파일을 보내주세요. 그러면 코딩 스타일까지는 일일이 확인하지 못 해도 풀이가 정답인지 아닌지는 확인해드리겠습니다! ^^ (코드 해답을 인터넷에 올리지 말아주세요. 미래에 이 과정을 듣는 스탠포드 학생들에게 피해가 갈 수 있습니다).


이번 주가 사실 조금 어려운 고비였습니다. 지난 주에 비해서 더 깊은 내용을 다뤘을 뿐만 아니라 중간 중간에 직접 코딩하며 연습해볼 기회도 더 적었죠. 그래서 많은 내용을 읽고 외우기만 해야되서 지난 주에 비해 지루하셨을 수도 있습니다. 하지만 구글과 애플의 수석 개발자들도 매일 사용하는 핵심적인 테크닉을 이제 익히셨으니 다음 주부터는 이론은 더 적게, 실전은 더 많이 다루도록 하겠습니다. 그럼 다음주 금요일 뵈요! ^^


Stanford CS106A 수업에 대한 모든 권리는 스탠포드 대학교가 가지고 있습니다. "스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음"은 스탠포드 대학교의 CS106A 수업을 남녀노소 누구나 쉽게 배울 수 있도록 각색하고 한국어로 번역한 내용이며, 본글에 대한 모든 권리도 스탠포드 대학교가 가지고 있습니다. CS106A 수업에 사용되는 교재인 Karel the Robot Learns Java와 The Art & Science of Java를 작성해주신 Eric Roberts 교수님과 CS106A 수업을 가르치고 계시며 해외로 수업 내용 반출을 허락해주신 Mehran Sahami 교수님 그리고 Marty Stepp 교수님께 감사드립니다.


스탠포드 대학교에서 컴퓨터 과학을 전공중인 박준원이라고 합니다. 질문은 junwonpk@stanford.edu로 보내주시면 24시간 내로 답변 드리겠습니다. 설명을 따라했는데도 똑같이 작동하지 않거나 설명에 이해하기 어려운 부분이 있으면 주저하지 말고 질문 보내주세요! ^^

저작자 표시 비영리 변경 금지
신고
4 Comments
댓글쓰기 폼
Prev 1 ... 12 13 14 15 16 17 18 19 20 ... 351 Next