유튜브에서 개발자에 대한 영상을 찾아보다가 '코딩알려주는누나'라는 채널에서 'Karel'이라는 스탠퍼드에서 만든 코딩 게임(이라고 해야 하나..)을 소개해주는 영상을 보게 되었는데 이 게임이 자신이 개발자와 맞는지 테스트해볼 수 있는 좋은 방법이라고 해서 솔깃한 마음에 한 번 해보게 되었다.

https://stanford.edu/~cpiech/karel/learn.html

 

Learn to Program

 

stanford.edu

총 12 unit으로 구성되어 있는데 그중 unit 10, 11은 오류가 있어서 그냥 넘어가면 된다.

나는 unit 9까지는 조금 어려운 부분이 있었어도 다 풀긴 했는데 unit 12는 정말 어려워서 구글링의 도움을 받아서 답을 확인했다... 하지만 끝까지 다 풀지 못했다고 해서 좌절할 필요는 없다!

문제를 푸는 과정에서 즐거움과 도전의식, 문제를 해결했을 때의 짜릿한 성취감을 느꼈다면 당신은 이미 개발자가 될 충분한 자질을 갖춘 사람이다.

 

지금부터는 내가 Karel 게임을 하면서 고민이 필요했던 문제들에 대한 나의 답안을 공유해 보겠다.

unit 8-5

unit 8-5이다.

World의 크기가 얼마나 되건 모든 곳에 Beeper를 놓고 Karel의 마지막 위치는 항상 World의 우측 상단에 있어야 한다.

함수로 putBeeperLine을 제공해 줬는데 이 함수는 Karel이 있는 위치에서 앞이 막힐 때까지 Beeper를 놓으면서 전진하는 함수이다. 이 함수를 이용해서 main 함수를 작성하면 되는데 내가 작성한 main 함수는 이렇다.

# unit 8-5
function main() {
   putBeeperLine();
   while(leftIsClear()){
      turnAround();
      while(frontIsClear()){
         move();
      }
      turnRight();
      move();
      while(noBeepersPresent()){
         turnRight();
         putBeeperLine();
      }
   }
}

이 함수는 처음에는 Karel이 putBeeperLine 함수를 수행하고 왼쪽이 막히지 않은 상태면 반 바퀴를 돈 다음 다시 처음 위치로 돌아간다. 그리고 처음 위치에서 위로 한 칸을 올라간 다음 그 줄에 Beeper가 존재하지 않는 한 오른쪽으로 방향을 돌린 다음 putBeeperLine 함수를 수행한다.

 

unit 9-2

unit 9-2이다.

Karel이 전진하다가 Beeper가 있는 곳에 가면 위로 끝까지 Beeper를 놓고 다시 돌아와서 전진해야 한다.

내가 작성한 main함수는 이렇다.

# 9-2
function main() {
   while(frontIsClear()){
      move();
      if(beepersPresent()){
         turnLeft();
         move();
         while(noBeepersPresent()){
            putBeeper();
            if(frontIsClear()){
               move();
            }
            else{
               turnAround();
               while(frontIsClear()){
                  move();
               }
               turnLeft();
            }
         }
      }
   }
}

 

+ Recent posts