레이블이 Programming Contest인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Programming Contest인 게시물을 표시합니다. 모든 게시물 표시

코딩테스트, 알고리즘테스트

코딩 문제를 어쩌다 풀면 느끼는건 내가 이렇게 바보인가라는 암울함과 풀었을때 밀려오는 앗싸 !풀었다 하는 뿌듯함이다. 후자까지 가기 어려운 문제들을 만나면 시간이 지날 수록 쌓여가는 스트레스와 집중력 저하로 그냥 포기하는게 정신 건강에 좋을때도 있는것 같다.
코딩테스트는 아주 어렵고 새로운 문제가 아니라면 일정한 알고리즘 방법들을 알고 응용하면 풀수있도록 만들어졌다. 그런데 나같이 알고리즘 공부를 맘먹고 해본적이 없거나 계속 문제를 풀어보지 않는 경우 그 쉬운 문제도 갈피를 못잡을때가 많다.
사실 코딩 하기전 생각을 하는 시간이 꽤길고, 그 생각(방법) 맞다면 몇분 안되는 코딩으로 결과를 낼 수 있어, 문제만 파악 되었다면 컴앞에 앉아 있지 않아도 된다. 편하게 누워서 머리속으로 이런저런 방법들을 생각해 볼 수 있다. 머리속에서 모든 것을 그려(시뮬레이션)볼 수 있는 고수가 아닌 내 경우는 종이에 이런저런 생각들을 써보고 정리하는게 많은 도움이 된다. 누구는 금방 생각나서 문제를 바로 푸는 사람이 있지만 여러가지 아이디어가 떠오르지만 막상 코딩 해보면 구멍이 많았다는것을 알게되는(나같은) 사람도 많을 것이다.
프로그래머로써 여러 유명한 프로그래밍 콘테스트에 입상하고 싶어 도전을 하는 경우도 있고 신입이나 이직을 생각하는 사람이라면 IT회사의 1차관문이자 역량의 척도로서 프로그래밍(코딩) 테스트를 보도록 한다. 프로그래밍 콘테스트는 경연지역이 넓어질수록 날아다니느 고수가 많고 등장하고 그만큼 문제도 어려우니 많은 준비(문제도 많이 풀고 알고리즘 책도 공부하고)가 필요한 경우이고, 입사,이직을 위한 경우라면 콘테스트까지는 아니니 문제를 어느정도 풀수 있어야 한다. 그런데 실무에서는 알고리즘을 생각하는 경우가 거의 없어 평소에 틈틈히 문제를 풀어봐서 감을 잃지 말아야한다. 그런데 게을러서 손을 많이 놓고 있는것 같다. 아니 사실은 어쩌다 문제에 꽂혀 풀고 나면 진이빠져 한동안 알고리즘을 생각하고 싶지 않게 된다. (충분한 휴식이 필요해~ㅋ) 암튼 알고리즘 문제를 들여다 보고 몇일 고생하고 풀어냈을때 만족감을 오랫만에 느낄 수 있어 좋았다.  그래도 꾸준히 문제를 풀어보지는 않을것 같다~ㅠ
한가지 불만사항은 문제의 난이도가 쉽고 어렵고를 떠나서 문제를 풀기 위해선 방법, 즉 알고리즘을 떠올려야 하고 이게 핵심인데, 모두들 코딩(coding)테스트라고 하고 한다. 사실 코딩이라는 것은 어떤 아이디어를 프로그래밍 언어의 문법(syntax)을 알아서 그 언어로 작성하는것이다. 영어를 안다고해서 미적분 문제을 풀지는 못한다. 미적분 문제를 푸는 방법이 알고리즘(algorithm)이라고 본다면 영어는 단순히 알고리즘을 표현하는 도구이고 이게 코딩이라고 생각한다. 아마 이렇게 까칠하게 나누지 않아도 알고리즘을 포함한 것을 일반적으로 문제를 푼다는 의미를 코딩에 암묵적으로 내포되어 있다고 모두들 알고 있을것 같다. 그래도 예전에 포스팅한 글에서 개발자라는 말보다 프로그래머라는 말을 쓰고 불러주길 바랬던것과 같이 코딩테스트가 알고리즘 또는 아이디어(방법을 생각해낸다는의 어떤 말???)같은 의미가 명확하게 들어가 있는 용어로 불렸으면 하는 바램이다.

코딩 게임 (Coding Game)

코딩 게임 프랑스에서 만든 코딩으로 게임하는 싸이트다.
원하는 프로그래밍 언어를 선택하고 게임 플레이를 프로그래밍 한다.
프로그래밍한 코드를 실행하면 게임이 시뮬레이션 되면서 점수가 매겨진다.
싱글,멀티로도 할 수 있고 콘테스트도 열린다.

http://www.codingame.com/home

매트릭스의 'There is no spoon' 문구와 함께 센티널과 인간의 전투화면이 인상적이다.


튜토리얼을 한번따라 진행해보면 쉽게 알 수 있다.

코딩 editor 의 설정 변경화면 단축키(ctrl + ,)


2016-03-31 Go 로 퍼즐만 풀었는데 랭킹이 쑥올라갔다~ㅋ




프로그래밍 게임 RoboCode

# 홈페이지 http://robocode.sourceforge.net/
# Robocode 는 내가 프로그래밍한 알고리즘이 게임에 반영되서 플레이가되는 프로그래밍 게임이다.
# Java 나 .Net 용 언어를 사용할 수 있으며 게임은 탱크를 컨트롤 하는 것이다.
# 대학교 초급 프로그래밍/알고리즘 등 과목에서 활용되면 좋을 듯 ㅎㅎ

# Java 해보기
# 설치하기 참고 http://robowiki.net/wiki/Robocode_Download_And_Install
# 기본적으로 C:\robocode 에 설치된다.
java -jar robocode-1.8.1.0-setup.jar

# 자체 에디터도 있지만 별로 좋지 않아서 eclipse 를 사용하도록 한다.
# eclipse 에 프로젝트에 lib 추가
# eclipse 프로젝트 properties -> Java Build Path -> Libraries -> Add External JARS -> C:\robocode\libs\robocode.jar

# robocode api 문서 http://robocode.sourceforge.net/docs/robocode/
# sample 소스를 참고해도 좋다.

////////////////
// ysoftman
// Robocode 테스트
////////////////
import java.awt.Color;
import robocode.*;

public class ysoftmanRobocode extends Robot
{
  public void run()
  {
    setBodyColor(Color.blue); // 탱크 색상
    setGunColor(Color.red); // 대포 색상
    setBulletColor(Color.red); // 대포알 색상

    while (true)
    {
      turnGunRight(360); // 대포 오른쪽으로 360도 회전
    }
  }
  // 적을 발견되면
  public void onScannedRobot(ScannedRobotEvent e)
  {
    // 거리가 짧으면 강하게 발사
    if (e.getDistance() < 20)
    {
      fire(3);
    }
    else
    {
      fire(1);
    }
  }
  // 우리가 포를 맞으면
  public void onHitByBullet(HitByBulletEvent e)
  {
    turnLeft(90); // 탱크 왼쪽 90도로 꺽기
    ahead(100); // 탱크 전진
  }
}

# 다음의 간단한 코드를 만들고 빌드하여 .class 만들고 C:\robocode\robots\ 에 위치시키거나
# 메뉴 Options -> Preferences -> Development -> Add -> .class 위치 를 추가한다.

# c:\robocode\robocode.bat 실행
# 메뉴 Battle -> New -> 자신이 만든 탱크와 상대편 탱크(샘플) 추가 -> Start Battle 로 시작한다.

스샷~