1. 개요
2048은 19세의 젊고 재능넘치는 이탈리아 청년 '가브리엘'의 작품.
기존의 게임 1024의 변형판으로 큰 성공을 이룸.
이 클래스를 설계하게된 이유는 코드를 작성할 때, 자신이 생각한 바를 명료하게 작성할 수 있는지.
그리고 예외처리를 모두 찾아서 코드를 작성했는지 스스로 점검하기에 무척 좋은 문제라서 작성했다.
다음은 규칙이다.
총 4가지 연산, LEFT, RIGHT, UP, DOWN이 있고, 그 내부의 규칙은 다음 그림과 같다.
위의 그림은 나무위키에서 가져온 그림으로, RIGHT 연산 수행을 보여준다.
마찬가지로 LEFT, RIGHT, UP, DOWN 모두 위의 규칙처럼 수행이 가능하여야 한다.
LEFT와 RIGHT의 연산은 연산 시작과 끝 범위만 반대이다.
UP과 DOWN도 마찬가지이다.
LEFT와 UP의 연산은 인덱스의 위치만 반대이다.
RIGHT와 DOWN도 마찬가지이다.
즉, 결국 한 방향으로 값을 밀어낸다는 반복된 기능들이기에 코드를 짧게 작성하고 싶으면
4개 코드 다 작성하지 않고 하나의 코드로 압축할 수 있겠지만 명료함을 위해서 모든 기능을 다 나누었다.
2. 문제
게임 2048의 기능을 구현 클래스를 구현하시오.
(이 기능을 가지고 최소 Depth 7의 모든 경우를 검사하는데 걸리는 시간이 3초 이내)
3. 전체코드 및 출력
3-1) 클래스 설계
3-2) 클래스 구현
3-3) LEFT, RIGHT, UP, DOWN 출력
3-4) Depth 7까지 소모 시간 출력
4. 소감
아쉽다.
조금만 더 명료한 사고를 가졌으면, 1시간 반 안에 충분히 작성할 수 있었는데.
그래도 또 어디가 부족한지 알았고, 어디를 지향해야하는지 알았으니까 좋다.
더 정진하자.
결국 초반 설계를 얼마나 빈틈없이 꼼꼼히하고, 설계가 끝나면 코드에 실수없이 명료하게 작성하는 것이 진짜 실력.
'테크 > 알고리즘' 카테고리의 다른 글
50. 수직선에서 최소 거리의 두 점 찾기 알고리즘 (0) | 2016.10.19 |
---|---|
15. 지렁이 키우기 게임 - 지렁이 클래스 설계 및 구현 (2) | 2016.10.18 |
13. 주사위 클래스 설계 및 구현 (0) | 2016.10.17 |
49. 이중 연결리스트(Doubly Linked List) 설계 (2) | 2016.10.11 |
48. [삼성 SW 테스트 대비 C언어 기본 모듈 점검] - 1 (최대,최소,SWAP,기본정렬) (0) | 2016.10.09 |