반응형
- 1. AI 오델로 게임 만들기 소개 1. 오델로 게임 오델로(Othello) 게임은 널리 알려진 2인 보드용 게임입니다. 원래의 기원은 1880년경 루이스 워터맨과 제임스 몰렛이라는 사람이 만든 리버시(Reversi) 게임입니다. 이 게임을 1898년 독일의 게임 회사인 라벤스부르그(Ravensburger)사가 가져와서 게임으로 출시했습니다. 1970년에 하세가와 고로가 일본에서 오델로(Othello)란 이름으로 보급하게 되었습니다. 오델로란 이름은 세익스피어의 소설 오셀로에서 가져왔는데, 하세가와측에서는 바둑에서 영감을 얻은 것이지 리버시를 차용한 것은 아니라고 부정하고 있습니다. 하지만 리버시와 연관성을 부정한 것은 저작권 문제로 보일뿐, 리버시와 같은 방식의 게임 방법 등, 유럽 문화에 익숙했던 하세가와 고로가 리버시를 차용..
- 동전을 n번 던졌을 때, 연속으로 앞면이 나타날 경우의 수는? 이런 경우의 수를 계산하는 것이 쉽지는 않습니다. 어떻게 생각을 해야 하는지가 중요하죠. 동전을 n번 던졌을 때의 경우의 총 수는 \(2^n\)입니다. 연속으로 앞면이 나타날 경우의 수는 총 경우의 수에서 연속으로 앞면이 나타나지 않을 경우의 수를 빼면 됩니다. 그러면 연속으로 앞면이 나타나지 않는 경우의 수를 어떻게 계산할까요? 수열을 만드는 과정을 생각해보죠. 동전의 뒷면을 0으로 앞면을 1로 가정을 해보도록 합니다. 4번 동전을 던진다면, 1이 연속으로 나타나는 경우의 수는 0011, 0110, 0111, 1011, 1100, 1101, 1110, 1111 으로 총 8가지입니다. 컴퓨터로 모든 경우의 수에 대해서 연속 1이 나오는지 카운팅하면 되겠지만, 수학적으로는 어떻게 풀까요? 수열을 만들때, ..
- [C/C++] 슬라이딩 퍼즐 - A* 알고리즘으로 풀기 이제, 최종적으로 구현을 한 프로그램입니다. A* 알고리즘을 적용하기 위해서 A* 용 자료구조를 설계했습니다. A* 알고리즘에서는 기본적으로 힙 구조를 사용하며, 검색을 빨리 하기 위해서 해시테이블을 이용합니다. 그래서 두 가지 모두를 결합한 형태의 자료구조를 만들었습니다. [PuzzleNode 자료구조]class PuzzleNode : public PQueue::Node{public: PuzzleNode(char *csquares, int cEmptySquare, int cvalue) : value(cvalue), visited(false) { squares = csquares; emptySquare = cEmptySquare; est = 0; ..
- [C/C++] 네모네모 로직(nonogram) 풀기 - 3 네모네모로직을 사람이 하는 방법을 채택해서 풀어보면 어떨까요? 이미 백트래킹 방법(back tracking)으로 네모네모 로직을 풀어보았습니다. 이 방법을 이용하면, 모든 경우를 다 탐색하기 때문에 풀지 못 하는 로직은 없습니다. 시간은 많이 걸릴 수가 있습니다. 사람이 푸는 방식을 채택해서 풀어보면, 보다 합리적인 시간안에 문제를 풀 수 있고, 이것을 이용하면, 합리적인 네모네모로직 문제를 만들 수도 있습니다. (네모네모 로직 중 답이 여러개인 경우도 꽤 있고 여러 경우의 수를 생각해서 풀어야 하는 것들도 있습니다.) 새로운 방법을 기존의 NemoLogic 클래스에 적용해서 클래스 설계를 해보았습니다. [NemoLogic class]class NemoLogic{public: NemoLogic()..
728x90
반응형