m개의 main dish 와 n개의 side dish 가 있다.
main dish 와 side dish 는 중복선택 불가하다고 할 때, main dish 와 side dish 로 가능한 모든 조합을 구해보자.
예를 들어, 2개의 main dish와 3개의 side dish가 있다면,
경우의 수는 3x2 = 6 이고, 모든 경우의 수는
{(m1, s1), (m2, s2)}
{(m1, s1), (m2, s3)}
{(m1, s2), (m2, s1)}
{(m1, s2), (m2, s3)}
{(m1, s3), (m2, s1)}
{(m1, s3), (m2, s2)}
for (int m1=s1; m1<=s3; m1++)
for (int m2=s1; m2<=s3; m2++)
if (m1==m2) continue;
printf("(m1, %d), (m2, %d)", m1, m2)
3개의 main dish와 3개의 side dish가 있다면, 3x2x1 = 6가지 경우이며,
{(m1, s1), (m2, s2), (m3, s3)}
{(m1, s1), (m2, s3), (m3, s2)}
{(m1, s2), (m2, s1), (m3, s3)}
{(m1, s2), (m2, s3), (m3, s1)}
{(m1, s3), (m2, s1), (m3, s2)}
{(m1, s3), (m2, s2), (m3, s1)}
for (int m1=s1; m1<=s3; m1++)
for (int m2=s1; m2<=s3; m2++)
if (m1==m2) continue;
for (int m3=s1; m3<=s3; m3++)
if (m3==m1 || m3==m2) continue;
printf("(m1, %d), (m2, %d), (m3, %d)", m1, m2, m3)
for loop 로 구현하면 m,n 값에 맞게 일일이 iterator 변수를 추가해주어야 하는 문제가 있음.
main dish2는 main dish1과 조합을 이루지 않은 side dish 중 한 개,
main dish3은 main dish1, main dish2와 조합을 이루지 않은 side dish 중 한 개 이므로
재귀로 구현해보면, 아래와 같음. (좀 더 간결하게 되려나)
#include <stdio.h>
void select(int id, int selected[3])
{
if (id == 2) {
int temp;
for (int iter = 0; iter < 3; iter++) {
if (selected[iter] == -1) {
temp = iter;
break;
}
}
selected[temp] = id;
for (int iter = 0; iter < 3; iter++) {
printf("(%d %d) ", iter, selected[iter]);
}
printf("\n");
selected[temp] = -1;
return;
}
for (int iter = 0; iter < 3; iter++) {
if (selected[iter] == -1) {
selected[iter] = id;
select(id+1, selected);
selected[iter] = -1;
}
}
}
int main()
{
int selected[3] = {-1, -1, -1};
select(0, selected);
return 0;
}
printf 부분 대신 다른 로직을 넣으면 permutation 경우의 수마다 특정 처리를 하는게 가능해보임. 예를 들면, main dish + side dish 조합 중 가장 가격이 싼 경우를 구할 때, printf 대신에 lowest_total_price 를 갱신하도록 하면 됨.
일단 코드를 좀 더 간결하게 하는 게 필요함.
또한 재귀 깊이가 어느 정도까지 가능한 지도 업데이트 할 것.
Slow but Steady
Posts List
2018년 6월 9일 토요일
2014년 2월 8일 토요일
path register
# vi .bash_profile 하고 열어 보시면,
PATH=$PATH:$HOME/bin <-- 이런 부분이 보일겁니다.
# source .bash_profile
----------------------------------------------------------------
# vi /etc/profile
PATH=$PATH:/usr/local/sbin:/usr/local/tomcat/bin
export PATH
맨뒤에 위의 두줄을 추가 시켜 주시고
# source /etc/profile 해주시면 적용됩니다.
PATH=$PATH:$HOME/bin <-- 이런 부분이 보일겁니다.
# source .bash_profile
----------------------------------------------------------------
# vi /etc/profile
PATH=$PATH:/usr/local/sbin:/usr/local/tomcat/bin
export PATH
맨뒤에 위의 두줄을 추가 시켜 주시고
# source /etc/profile 해주시면 적용됩니다.
2014년 1월 24일 금요일
Getting a source and building of Kitkat
[Prepare the environment]
8) Prepare To Compile:
Or:
9) Get your list of devices:
10) Pick your poison.
11) Now compile ('#' being the number of cores in your processor +1):
Or for a flashable zip:
[Reference]
http://blog.naver.com/PostView.nhn?blogId=ysjin1212&logNo=110166566875
http://forum.xda-developers.com/showthread.php?t=2506695
http://source.android.com/source/building-running.html
① Python and Make Utility
Python이나 Make 유틸리티 같은 경우에는 기본적으로 리눅스 패키지에 포함되어 있다.
혹시 설치 시에 누락되었을 경우 apt-get 설치 관리자를 통하여 쉽게 다음 명령어로 쉽게 설치 가능하다.
$ sudo apt-get install python
$ sudo apt-get install make
|
② JAVA JDK
JDK를 설치하는 방법은 다음과 같이 안드로이드 사이트에 명시되어 있다.
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
|
더 상세히 보면....
먼저, python-software-properties 패키지가 필요한데 보통은 기본적으로 깔려있다.
하지만 없는 경우도 있으니 다음 커맨드로 먼저 설치하여 준다.
하지만 없는 경우도 있으니 다음 커맨드로 먼저 설치하여 준다.
$ sudo apt-get install python-software-properties
|
그리고 나서 다음 명령을 입력하여 준다.
첫 번째 명령을 치면 계속하려면 Enter, 중지하려면 Ctrl + C 키를 입력하라고 나오는데
ENTER를 쳐주면 계속해서 다운로드 패키지를 등록한다.
ENTER를 쳐주면 계속해서 다운로드 패키지를 등록한다.
$ sudo add-apt-repository ppa:ferramroberto/java
$ sudo apt-get update
|
그러면 sun-java6-jdk 패키지가 등록이 되고 설치가 된다. java6-jdk와 플러그인 설치를 위해
다음의 명령어로 설치 할 수 있다.
다음의 명령어로 설치 할 수 있다.
$ sudo apt-get install sun-java6-jdk sun-java6-plugin
|
그런데 위의 명령을 통해서 JDK를 설치 할 수 있으나 버젼이 java 6만이 가능하다.
따라서 java7, java8 등 상위버전을 설치하고 싶다면 다음 명령으로 설치 가능하다.
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
|
그러면 Oracle Java Installer를 통해서 원하는 버전의 자바 JDK의 설치가 가능하다.
Java 6를 설치하려면,
$ sudo apt-get install oracle-java6-installer
|
Java 7을 설치하려면,
$ sudo apt-get install oracle-java7-installer
|
Java 8을 설치하려면,
$ sudo apt-get install oracle-java8-installer
|
설치 후 이미 중복 설치되어 있는 여러버전의 JDK를 관리해 줄 필요가 있을 수 있다.
그럴 때는 다음 명령어를 통해서 원하는 JDK를 선택하여 주면 된다.
$ sudo update-alternatives --config java
|
선택 경로 우선순 상태
-----------------------------------------------------------------------------------------------------
* 0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1062 자동 모드
1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 수동 모드
2 /usr/lib/jvm/java-8-oracle/jre/bin/java 1062 수동 모드
기본 사항[*]을 사용하려면 엔터, 다른 것을 사용하려면 번호를 입력하십시오:
|
그럼 위와 같은 콘솔 화면이 나오는데 목록 중 원하는 JDK의 번호를 입력하여 선택해 주면 된다.
선택된 자바의 버전을 확인하기 위해서 다음 명령어를 통해 확인하여 본다.
$ java -version
|
③ GIT
리눅스 커널은 git에 의해 버전이 관리되고 다운로드 할 수 있다.
따라서 git을 설치해주어야 한다. git 또한 apt-get을 이용하여 손쉽게 설치 가능하다.
$ sudo apt-get install git
|
2. 필요한 라이브러리 패키지들
우분투의 버전마다 필요한 라이브러리가 살짝 다르긴 하다. 구글에서는 우분트 10.04 64비트를 권장하고 있다.
안드로이드 사이트에서는 우분투 버전 10.04 ~ 11.10에 해당하는 시스템들은 다음 명령어를 통하여 필요한 라이브러리를 설치하라고 명시되어 있다.
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 python-markdown libxml2-utils xsltproc
|
하지만, 이 또한 업데이트가 되지 않아 몇 가지 라이브러리가 오류가 발생한다.
오류가 발생하거나 대체된 것들을 수정한 다음 명령어를 실행하면 한번에 설치 가능하다.
[ ubuntu 10.04에서 ]
$ sudo sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 python-markdown libxml2-utils xsltproc libpcsclite-dev
|
[ ubuntu 11.10에서 ]
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 python-markdown libxml2-utils xsltproclibpcsclite-dev
|
우분투 10.10 인 경우에는 다음 명령을 통하여 링크하나를 생성해 준다.
$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
|
우분투 11.10은 추가적으로 패키지 하나를 추가로 설치하여 준다.
$ sudo apt-get install libx11-dev:i386
|
우분투 12.04 버전인 경우 다음 명령을 통하여 설치해 준다.
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
|
하지만 libgl1-mesa-glx:i386 패키지가 libglapi-mesa:i386 의존성으로 인해 설치가 안 되므로
libglapi-mesa:i386패키지를 추가하여 설치하여 준다. 또한 "make menuconfig"를 수행하기 위하여
libglapi-mesa:i386패키지를 추가하여 설치하여 준다. 또한 "make menuconfig"를 수행하기 위하여
필요한 lib32ncurses5-dev 도 미리 설치하여 준다.
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libglapi-mesa:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 lib32ncurses5-dev
|
혹시 다음과 같은 에러가 발생한다면,
다음 패키지의 의존성이 맞지 않습니다:
lib32ncurses5-dev : 의존: libncurses5-dev (= 5.9-4) 하지만 %s 패키지를 설치하지 않을 것입니다 E: 문제를 바로잡을 수 없습니다. 망가진 고정 패키지가 있습니다. |
위의 패키지에서 libncurses5-dev만 빼고 설치 후
$ sudo apt-get install lib32ncurses5-dev 명령으로 libncurses5-dev만 따로 설치해 준다.
다음 명령을 통하여 링크 파일도 생성하여 준다.
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
|
Install the repo:
Code:
$ mkdir ~/bin $ PATH=~/bin:$PATH $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
6) Initialize the repo:
Code:
$ mkdir WORKING_DIRECTORY $ cd WORKING_DIRECTORY
6a) For AOSP:
Code:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.4_r1
6.1) For people who have already done a repo init:
Code:
$ cd WORKING_DIRECTORY
AOSP:
Code:
$ repo init -b android-4.4_r1 $ repo sync
7) When prompted, enter your real name and email address.
8) Gather the files:
8) Gather the files:
Code:
$ repo sync
7) Navigate back to your home directory for building:
Code:
$ cd ~/WORKING_DIRECTORY
Code:
$ source build/envsetup.sh
Code:
$ . build/envsetup.sh
Code:
$ lunch
11) Now compile ('#' being the number of cores in your processor +1):
Code:
$ make -j#
Code:
$ make -j# otapackage
Emulate an Android Device
The emulator is added to your path automatically by the build process. To run the emulator, type
$ emulator
[Reference]
http://blog.naver.com/PostView.nhn?blogId=ysjin1212&logNo=110166566875
http://forum.xda-developers.com/showthread.php?t=2506695
http://source.android.com/source/building-running.html
Freeze in Ubuntu logo in boot
[Reason]
lightdm (light gdm) has some bugs. It is still in develop. So, suggest gdm instead of it.
[Solution]
1. Press Ctrl+Alt+F1 to get to a text-based virtual console
2. Uninstall lightdm and install gdm instead.
3. When you fail to log-in,
lightdm (light gdm) has some bugs. It is still in develop. So, suggest gdm instead of it.
[Solution]
1. Press Ctrl+Alt+F1 to get to a text-based virtual console
2. Uninstall lightdm and install gdm instead.
sudo apt-get remove lightdm
sudo apt-get update
sudo apt-get install gdm
sudo start gdm
3. When you fail to log-in,
sudo apt-get update
sudo apt-get install ubuntu-desktop
sudo apt-get install -f install
sudo dpkg-reconfigure ubuntu-desktop
sudo reboot
[Reference]
http://askubuntu.com/questions/175481/ubuntu-12-gdm-install-remove-problem
http://askubuntu.com/questions/205872/failed-to-load-session-ubuntu2013년 8월 11일 일요일
ClockSync
Initial think
#include <stdio.h>
int c;
int clkTime[16];
int clkOfSW[10][5] = {
{0,1,2,-1,-1},//0
{3,7,9,11,-1},
{4,10,14,15,-1},
{0,4,5,6,7},
{6,7,8,10,12},
{0,2,14,15,-1},//5
{3,14,15,-1,-1},
{4,5,7,14,15},
{1,2,3,4,5},
{3,4,5,9,13}//9
};
int swSize2[10] = {3,4,4,5,5,4,3,5,5,5};
int swOfClk[16][4] = {
{0,3,5,-1},
{0,8,-1,-1},
{0,5,8,-1},
{1,6,8,9},
{2,3,5,8},
{3,7,8,9},//5
{3,4,-1,-1},
{1,3,4,7},
{4,-1,-1,-1},
{1,9,-1,-1},
{2,4,-1,-1},//10
{1,-1,-1,-1},
{4,-1,-1,-1},
{9,-1,-1,-1},
{2,5,6,7},
{2,5,6,7}//15
};
int swSize[16]= {3,2,3,4,4,4,2,4,1,2,2,1,1,1,4,4};
int curMin,cnt;
void sub();
FILE* fin;
FILE* fout;
int press[20000];
int pressCnt;
void main()
{
fin = fopen("in.txt","r");
fout = fopen("out.txt","w");
//scanf("%d", &c);
fscanf(fin,"%d",&c);
for (int i=0; i<c; i++)
{
for (int j=0; j<16; j++)
//scanf("%d",&(clkTime[j]));
fscanf(fin,"%d",&(clkTime[j]));
curMin = 65535;
cnt= 0;
pressCnt=0;
sub();
//printf("%d\n",curMin);
fprintf(fout,"%d\n",curMin);
}
fclose(fin);
fclose(fout);
}
void sub()
{
int clk = 0;
while (clk<15)
{
if (clkTime[clk] != 12) {
break;
}
clk++;
}
if (clk == 15)
{
if(curMin > cnt)
{
curMin = cnt;
fprintf(fout,"clk=15. cnrMin=%d\n\n",curMin);
}
return;
}
for(int sw=0; sw<swSize[clk]; sw++)
{
for (int cc=0; cc<swSize2[sw]; cc++)
{
clkTime[clkOfSW[sw][cc]] += 3;
if(clkTime[clkOfSW[sw][cc]] > 12) clkTime[clkOfSW[sw][cc]] -= 12;
}
cnt++;
press[pressCnt++] = sw;
fprintf(fout, "%d press. cnt=%d\n", sw, cnt);
for(int jj=0; jj<pressCnt; jj++) fprintf(fout,"%d ", press[jj]); fprintf(fout,"\ntime: ");
for(int jj=0; jj<16; jj++) fprintf(fout,"%d ", clkTime[jj]); fprintf(fout,"\n");
sub();
for (int cc=0; cc<swSize2[sw]; cc++)
{
clkTime[clkOfSW[sw][cc]] -= 3;
if(clkTime[clkOfSW[sw][cc]] == 0) clkTime[clkOfSW[sw][cc]] = 12;
}
cnt--;
pressCnt--;
fprintf(fout, "%d unpress. cnt=%d\n", sw, cnt);
for(int jj=0; jj<pressCnt; jj++) fprintf(fout,"%d ", press[jj]); fprintf(fout,"\ntime: ");
for(int jj=0; jj<16; jj++) fprintf(fout,"%d ", clkTime[jj]); fprintf(fout,"\n");
}
}
#include <stdio.h>
int c;
int clkTime[16];
int clkOfSW[10][5] = {
{0,1,2,-1,-1},//0
{3,7,9,11,-1},
{4,10,14,15,-1},
{0,4,5,6,7},
{6,7,8,10,12},
{0,2,14,15,-1},//5
{3,14,15,-1,-1},
{4,5,7,14,15},
{1,2,3,4,5},
{3,4,5,9,13}//9
};
int swSize2[10] = {3,4,4,5,5,4,3,5,5,5};
int swOfClk[16][4] = {
{0,3,5,-1},
{0,8,-1,-1},
{0,5,8,-1},
{1,6,8,9},
{2,3,5,8},
{3,7,8,9},//5
{3,4,-1,-1},
{1,3,4,7},
{4,-1,-1,-1},
{1,9,-1,-1},
{2,4,-1,-1},//10
{1,-1,-1,-1},
{4,-1,-1,-1},
{9,-1,-1,-1},
{2,5,6,7},
{2,5,6,7}//15
};
int swSize[16]= {3,2,3,4,4,4,2,4,1,2,2,1,1,1,4,4};
int curMin,cnt;
void sub();
FILE* fin;
FILE* fout;
int press[20000];
int pressCnt;
void main()
{
fin = fopen("in.txt","r");
fout = fopen("out.txt","w");
//scanf("%d", &c);
fscanf(fin,"%d",&c);
for (int i=0; i<c; i++)
{
for (int j=0; j<16; j++)
//scanf("%d",&(clkTime[j]));
fscanf(fin,"%d",&(clkTime[j]));
curMin = 65535;
cnt= 0;
pressCnt=0;
sub();
//printf("%d\n",curMin);
fprintf(fout,"%d\n",curMin);
}
fclose(fin);
fclose(fout);
}
void sub()
{
int clk = 0;
while (clk<15)
{
if (clkTime[clk] != 12) {
break;
}
clk++;
}
if (clk == 15)
{
if(curMin > cnt)
{
curMin = cnt;
fprintf(fout,"clk=15. cnrMin=%d\n\n",curMin);
}
return;
}
for(int sw=0; sw<swSize[clk]; sw++)
{
for (int cc=0; cc<swSize2[sw]; cc++)
{
clkTime[clkOfSW[sw][cc]] += 3;
if(clkTime[clkOfSW[sw][cc]] > 12) clkTime[clkOfSW[sw][cc]] -= 12;
}
cnt++;
press[pressCnt++] = sw;
fprintf(fout, "%d press. cnt=%d\n", sw, cnt);
for(int jj=0; jj<pressCnt; jj++) fprintf(fout,"%d ", press[jj]); fprintf(fout,"\ntime: ");
for(int jj=0; jj<16; jj++) fprintf(fout,"%d ", clkTime[jj]); fprintf(fout,"\n");
sub();
for (int cc=0; cc<swSize2[sw]; cc++)
{
clkTime[clkOfSW[sw][cc]] -= 3;
if(clkTime[clkOfSW[sw][cc]] == 0) clkTime[clkOfSW[sw][cc]] = 12;
}
cnt--;
pressCnt--;
fprintf(fout, "%d unpress. cnt=%d\n", sw, cnt);
for(int jj=0; jj<pressCnt; jj++) fprintf(fout,"%d ", press[jj]); fprintf(fout,"\ntime: ");
for(int jj=0; jj<16; jj++) fprintf(fout,"%d ", clkTime[jj]); fprintf(fout,"\n");
}
}
2013년 8월 10일 토요일
BoardCover
Correct answer#include <stdio.h> #include <assert.h> int testNum, row, col; int Board[20][20]; int whiteCnt; int ans; void sub(); FILE *fin, *fout; void printBoard(FILE *fp) { for (int r=0; r<row; r++) { for(int c=0; c<col; c++) fprintf(fp, "%d ", Board[r][c]); fprintf(fp, "\n"); } } int main() { //fin = fopen("in.txt", "r"); //fout = fopen("out.txt", "w"); //fscanf(fin, "%d",&testNum); scanf("%d",&testNum); for (int ii=0; ii<testNum; ii++) { for (int r=0; r<row; r++) for (int c=0; c<col; c++) Board[r][c] = -1; whiteCnt = 0; ans = 0; //fscanf(fin, "%d%d",&row,&col); scanf("%d%d",&row,&col); char newline; //fscanf(fin, "%c", &newline); scanf("%c", &newline); for (int r=0; r<row; r++) { char buffer[20] = {0, }; fgets(buffer, 20, stdin); for (int c=0; c<col; c++) { if(buffer[c]=='#') Board[r][c] = 0; else if(buffer[c]=='.') { Board[r][c] = 1; whiteCnt++; } else assert(0); } } // do my work //printBoard(fout); sub(); //fprintf(fout, "\nans = %d\n", ans); printf("%d\n", ans); } //fclose(fin); //fclose(fout); return 0; } void sub() { //fprintf(fout, "--------------------\n"); //fprintf(fout, "row=%d, col=%d, whiteCnt=%d, sR=%d, sC=%d\n", row, col, whiteCnt, sR, sC); //printf("row=%d, col=%d, whiteCnt=%d, sR=%d, sC=%d\n", row, col, whiteCnt, sR, sC); //printBoard(fout); if (whiteCnt == 0) { ans++; //fprintf(fout, "ok! return. ans=%d\n", ans); //printf("ok! return.\n"); return; } if (whiteCnt < 3) { //fprintf(fout, "no room. stop here. whiteCnt=%d\n", whiteCnt); //printf("no room. stop here. whiteCnt=%d\n", whiteCnt); return; } if (whiteCnt % 3 != 0) { //fprintf(fout, "not multiple of 3. stop here. whiteCnt=%d\n", whiteCnt); //printf("not multiple of 3. stop here. stop here. whiteCnt=%d\n", whiteCnt); return; } bool find=false; int r=0, c=0; for (r=0; r<row; r++) { for (c=0; c<col; c++) { if (Board[r][c]==1) { find=true; break; } } if(find==true) break; } if (find == false) { //printf("no white.\n"); ans++; return; } //fprintf(fout, "(%d %d) ", r, c); // shape1 // 1 1 // x 1 if (r+1<row && c+1<col && Board[r][c]==1 && Board[r][c+1]==1 && Board[r+1][c+1]==1) { //fprintf(fout, "%d row, %d col, shape 1 matched\n", r, c); Board[r][c]=2; Board[r][c+1]=2; Board[r+1][c+1]=2; whiteCnt-=3; sub(); //fprintf(fout, "%d row, %d col : shape 1 roleback\n", r,c ); whiteCnt+=3; Board[r][c]=1; Board[r][c+1]=1; Board[r+1][c+1]=1; //printBoard(fout); } // shape2 // x 1 // 1 1 if (r+1<row && c-1>=0 && Board[r][c]==1 && Board[r+1][c]==1 && Board[r+1][c-1]==1) { //fprintf(fout, "%d row, %d col, shape 2 matched\n", r, c); Board[r][c]=2; Board[r+1][c]=2; Board[r+1][c-1]=2; whiteCnt-=3; sub(); //fprintf(fout, "%d row, %d col : shape 2 roleback\n", r, c); whiteCnt+=3; Board[r][c]=1; Board[r+1][c]=1; Board[r+1][c-1]=1; } // shape3 // 1 x // 1 1 if (r+1<row && c+1<col && Board[r][c]==1 && Board[r+1][c]==1 && Board[r+1][c+1]==1) { //fprintf(fout, "%d row, %d col, shape 3 matched\n", r, c); Board[r][c]=2; Board[r+1][c]=2; Board[r+1][c+1]=2; whiteCnt-=3; sub(); //fprintf(fout, "%d row, %d col : shape 3 roleback\n", r, c); whiteCnt+=3; Board[r][c]=1; Board[r+1][c]=1; Board[r+1][c+1]=1; //printBoard(fout); } // shape4 // 1 1 // 1 x if (r+1<row && c+1<col && Board[r][c]==1 && Board[r][c+1]==1 && Board[r+1][c]==1) { //fprintf(fout, "%d row, %d col, shape 4 matched\n", r, c); Board[r][c]=2; Board[r][c+1]=2; Board[r+1][c]=2; whiteCnt-=3; sub(); //fprintf(fout, "%d row, %d col : shape 4 roleback\n", r, c); whiteCnt+=3; Board[r][c]=1; Board[r][c+1]=1; Board[r+1][c]=1; //printBoard(fout); } //fprintf(fout, "no. return\n"); }
피드 구독하기:
글 (Atom)