코딩 입문자용 강의를 찾다가 Karel이라는 것에 대해 알게 되었다.
Karel이란 스탠퍼드 대학에서 만든 일종의 교육용 프로그래밍 게임이다.
초보자로서 프로그래밍을 접하기에 괜찮을 것 같아 한번 해보기로 했다.
https://stanford.edu/~cpiech/karel/learn.html
Learn to Program
stanford.edu
사이트에 접속하면 이런 화면이 뜬다.
중간의 Start버튼을 눌러 시작하면 된다.
밑의 회색 사각형들은 각 Unit을 의미한다.
사이트가 전부 영어로 되어 있지만 대부분 쉬운 단어로 이루어져 있고, 진행 방식이 직관적이라 큰 어려움은 없었다.
Karel이라는 로봇을 주어진 상황에 맞게 움직이면 되는데, 어 이거 어딘가 익숙하다 싶었다.
내가 처음으로 접했던 프로그래밍 강의인 부스트코스의 <처음 배우는 프로그래밍 (w.python)>에서 휴보라는 로봇을 움직여봤던 기억이 떠올라 반가웠다.
참고로 아래의 캡처본은 Karel 에서 사용하게 되는 Reference들이다.
그렇게 Unit 7 까지는 금방 넘어갈 수 있었다.
처음으로 막히게 된 부분은 Unit 8의 Lesson 3 부분이었다.
풀고 보니 별거 아니었다. 처음에 putBeeper(); 만 추가해 주면 된다.
정말 어려웠던 건 Unit 8 Lesson 5였다. 꽤 오랫동안 붙잡고 있었다.
While을 사용하여 심플한 코드를 만들고 싶었는데 자꾸만 무한 반복을 하거나 벽에 부딪혀 에러가 났다.
결국 포기하고 일일이 움직여 보기로 했다. 최대한 코드 길이를 줄여서..
모양새는 얼추 맞게 나왔는데 게임에서 원하는 답은 이게 아니었는지 왼쪽 Goal은 틀렸고, 오른쪽 Goal은 맞았다는 결과가 나왔다.

이때쯤 답을 구글링해 볼까 싶었지만 어설프게라도 내 답을 내서 정답과 비교해 봐야 더 의미가 있을 것 같아 좀 더 고민해 보기로 했다.
그렇게 다양한 시도 끝에 내가 낸 정답!
검색해 보니 많은 사람들이 어려워하는 문제인 것 같았다.
다른 사람들의 답을 보며 이렇게 코드를 정리할 수도 있구나 비교해 볼 수 있었다.
leftIsClear 사용하기, 짝수 칸이므로 한 줄씩 세팅하기가 힌트가 될 수 있을 것 같다.
다음으로 막힌 부분은 Unit 9 Lesson 2.
if를 이용하여 beeper가 있는 상황에서 위로 한 줄씩 만들 수 있게 움직이려 했는데, 마지막 자리에 beeper를 놓는 순간 코드가 꼬여버린다.
그렇게 내가 낸 답은 이렇다. Unit 8 Lesson 5보다 시간은 덜 걸렸지만 좀 얼떨결에 풀었다는 느낌이 들었다.
if를 사용할 땐 범위를 잘 설정해야 의도와 다른 엉뚱한 결과가 나오지 않는다. 이 점이 이 문제 풀이의 포인트인 것 같다.
Unit 10, 11은 에러가 뜨며 진행이 되지 않았다. 찾아보니 사이트 자체에 문제가 있는 것 같았다.
그대로 패스하고 대망의 Unit 12 Lesson 1.
어렵다는 이야기를 많이 봐서 좀 겁이 났지만 도전!
중간에 beeper를 놓고 가라는 것 같은데, 5×5에서도 7×7에서도 중심을 찾을 수 있는 방법을 찾아야 했다.
달팽이 모양으로 움직여 볼까 홀수 짝수를 이용해볼까 고민을 하다가 양옆을 반복해서 움직이며 beeper를 놓아 먼저 중심을 찾은 뒤 되돌아가 Goal의 모양을 만들어 보기로 했다.
여러 시행착오 끝에 내가 낸 답은 이렇다. 생각보다 오래 걸리진 않았지만 확실히 생각할 게 많은 문제였다.
중간에 코드를 한번 날려서 그 이후로는 실행할 때마다 메모장에 옮겨 놓았다.
function main(){
putBeeper();
while(frontIsClear()){
move();
}
putBeeper();
setting();
go(); //초기세팅
while(noBeepersPresent()){
putBeeper();
move();
go();
}
pickBeeper(); //중심찾기
while(frontIsClear()){
move();
}
turnAround();
pickBeeper();
while(frontIsClear()){
move();
if (beepersPresent()){
pickBeeper();
}else{
putBeeper();
}
}
}
function setting(){
turnAround();
move();
}
function go(){
while(noBeepersPresent()){
move();
}
setting();
}
다른 사람들의 답을 찾아보니 정말 다양한 방법, 신박한 방법들이 있었다.
나랑 비슷한 느낌으로 푼 사람도 있었고, 내가 처음 생각했던 것처럼 달팽이 모양으로 중심을 찾은 사람, 대각선을 사용하여 중심을 찾은 사람도 있었다. 홀수×홀수 정사각형 상황임을 이용하여 2:1비율로 중심을 찾는 풀이를 봤을 땐 나도 모르게 입 밖으로 우와 소리가 나왔다. 이런 방법이 있었다니.
모든 Unit을 진행하는 데에 꼬박 하루가 걸렸다. 하지만 어려운 문제의 답을 찾을 때마다 정말 뿌듯했고, 다른 사람들의 답과 비교해 보는 것도 재미있었다.
+ 더 많은 문제를 풀어볼 수 있는 곳이 있대서 아래 주소로 들어가봤다.
http://telnicky.github.io/kareljs/
http://telnicky.github.io/kareljs/
Welcome, I am Karl the robot. My world contains green beepers and I need your help to organize them. On the screen you have a text editor, the code you write in the text editor will help me navigate through my world. Remember karl understands javascript, s
telnicky.github.io
두 문제를 풀어봤는데 이게 맞는 답인지 확인할 방법이 딱히 없어 재미로 참고만 해야 할 것 같다.
뒤쪽 레벨 문제들은 꽤 어려워 보였는데, 시간이 날 때 마저 해봐야겠다.
'기타' 카테고리의 다른 글
[도서] 비전공자를 위한 이해할 수 있는 IT 지식 (0) | 2022.12.31 |
---|---|
코드스테이츠 엔트리 코스 4일차/5일차 (0) | 2022.11.09 |
코드스테이츠 엔트리 코스 3일차 (0) | 2022.11.09 |
코드스테이츠 엔트리 코스 2일차 (0) | 2022.11.09 |
코드스테이츠 엔트리 코스로 프론트엔드 & 백엔드 체험하기 1일차 (0) | 2022.11.08 |
댓글