Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 141 additions & 0 deletions Ho/202507/25 계산 게임.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
```java
import java.util.ArrayDeque;
import java.util.Iterator;

class UserSolution {

static int INIT_IDX = 50_000;
static int MAX_SIZE = 100_000;
static int MOD = 20;
int leftIdx;
int rightIdx;
int jokerNumber;
int[] cards;
ArrayDeque<Integer>[][] answerList;

void init(int mJoker, int mNumbers[]) {
cards = new int[MAX_SIZE];
leftIdx = INIT_IDX;
rightIdx = INIT_IDX;
jokerNumber = mJoker;

answerList = new ArrayDeque[MOD][MOD];

// 정답지 관리하기
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
answerList[i][j] = new ArrayDeque<>();
}
}

// 오른쪽에 삽입하는 경우
appendRight(mNumbers);
for (int joker = 0; joker < 20; joker++) {

for (int i = 0; i < 2; i++) {
int sum = 0;
for (int j = 0; j < 4; j++) {
int curNum = cards[leftIdx + i + j];
if(curNum == -1) {
curNum = joker;
}
sum += curNum;
}
int curMod = sum % 20;
// 시작 인덱스 넣어주기
answerList[joker][curMod].addLast(leftIdx + i);
}
}
}

void putCards(int mDir, int mNumbers[]) {
if (mDir == 0) {
appendLeft(mNumbers);
calcNumber(mDir);
}else{
appendRight(mNumbers);
calcNumber(mDir);
}
}

int findNumber(int mNum, int mNth, int ret[]) {
// 정답지에서 찾기
ArrayDeque<Integer> current = answerList[jokerNumber% MOD][mNum];
if(current.size() < mNth) return 0;
Iterator<Integer > iter = current.iterator();
Integer cur = 0;

while (mNth-- > 0 && iter.hasNext()) {
cur = iter.next();
}

for (int i = 0; i < 4; i++) {
ret[i] = cards[cur + i];
}

return 1;
}

void changeJoker(int mValue) {
jokerNumber = mValue % MOD;
}

void appendRight(int[] arr) {
for (int i = 0; i < 5; i++) {
cards[rightIdx] = arr[i];
rightIdx++;
}
}

void appendLeft(int[] arr) {
leftIdx -= 5;
for(int i = 0; i < 5; i++) {
cards[leftIdx + i] = arr[i];
}
}

void calcNumber(int mDir) {
// 추가된 카드 계산을 반영하기

if(mDir == 0) {
// 조커가 MOD 때문에 20까지니까 모두 추가하기
for (int joker = 0; joker < MOD; joker++) {
// 왼쪽 삽입인 경우
for (int i = 4; i >= 0; i--) {
int sum = 0;
for (int j = 0; j < 4; j++) {
int curNum = cards[leftIdx + i + j];
if(curNum == -1) {
curNum = joker;
}
sum += curNum;
}
int curMod = sum % 20;
// 시작 인덱스 넣어주기
answerList[joker][curMod].addFirst(leftIdx + i);
}
}
}
else {
// 조커가 MOD 때문에 20까지니까 모두 추가하기
for (int joker = 0; joker < MOD; joker++) {
// 오른쪽 삽입인 경우
for (int i = -8; i < -3; i++) {
int sum = 0;
for (int j = 0; j < 4; j++) {
int curNum = cards[rightIdx + i + j];
if(curNum == -1) {
curNum = joker;
}
sum += curNum;
}
int curMod = sum % 20;
// 시작 인덱스 넣어주기
answerList[joker][curMod].addLast(rightIdx + i);
}
}
}

}
}
```
Empty file added Ho/202507/30 AI 로봇.md
Empty file.