(Topcoder)TCO algorithm 2016 500pt
이 문제의 의문점 5중배열의 선언이 이해가 가질 않았다.
[A][B][C][이전 꺼][이 전전꺼]
-->>>>A,B,C는 현재위치에 해당하는 A,B,C이며 이전과 이전전에 따라 구분되기 때문에 5중배열이 선언되었다.
public class ThreeProgrammers {
public static void main(String[] args) {
// TODO Auto-generated method stub
String a="BB";
System.out.println(validCodeHistory(a));
}
public static String validCodeHistory(String code)
{
int a=0,b=0,c=0;
for(int i=0;i<code.length();i++)
{
if(code.charAt(i)=='A')a++;
else if(code.charAt(i)=='B')b++;
else c++;
}
String bad="impossible";
String[][][][][] dp=new String[a+1][b+1][c+1][3][3];
if(a>0){
dp[1][0][0][0][0]="A";
}
if(b>0)
dp[0][1][0][1][0]="B";
if(c>0)
dp[0][0][1][2][0]="C";
int i,j,k,w,e;
for(i=0;i<=a;i++){
for(j=0;j<=b;j++){
for(k=0;k<=c;k++){
for(w=0;w<3;w++){
for(e=0;e<3;e++){
if(dp[i][j][k][w][e]==null)continue;
if(i<a){
dp[i+1][j][k][0][w]=dp[i][j][k][w][e]+"A";
}
if(j<b && w!=1)
dp[i][j+1][k][1][w]=dp[i][j][k][w][e]+"B";
if(k<c && w!=2 && e!=2)
dp[i][j][k+1][2][w]=dp[i][j][k][w][e]+"C";
}
}
}
}
}
for(w=0;w<3;w++){
for(e=0;e<3;e++){
if(dp[a][b][c][w][e]!=null)
return dp[a][b][c][w][e];
}
}
return bad;
}
}
[A][B][C][이전 꺼][이 전전꺼]
-->>>>A,B,C는 현재위치에 해당하는 A,B,C이며 이전과 이전전에 따라 구분되기 때문에 5중배열이 선언되었다.
public class ThreeProgrammers {
public static void main(String[] args) {
// TODO Auto-generated method stub
String a="BB";
System.out.println(validCodeHistory(a));
}
public static String validCodeHistory(String code)
{
int a=0,b=0,c=0;
for(int i=0;i<code.length();i++)
{
if(code.charAt(i)=='A')a++;
else if(code.charAt(i)=='B')b++;
else c++;
}
String bad="impossible";
String[][][][][] dp=new String[a+1][b+1][c+1][3][3];
if(a>0){
dp[1][0][0][0][0]="A";
}
if(b>0)
dp[0][1][0][1][0]="B";
if(c>0)
dp[0][0][1][2][0]="C";
int i,j,k,w,e;
for(i=0;i<=a;i++){
for(j=0;j<=b;j++){
for(k=0;k<=c;k++){
for(w=0;w<3;w++){
for(e=0;e<3;e++){
if(dp[i][j][k][w][e]==null)continue;
if(i<a){
dp[i+1][j][k][0][w]=dp[i][j][k][w][e]+"A";
}
if(j<b && w!=1)
dp[i][j+1][k][1][w]=dp[i][j][k][w][e]+"B";
if(k<c && w!=2 && e!=2)
dp[i][j][k+1][2][w]=dp[i][j][k][w][e]+"C";
}
}
}
}
}
for(w=0;w<3;w++){
for(e=0;e<3;e++){
if(dp[a][b][c][w][e]!=null)
return dp[a][b][c][w][e];
}
}
return bad;
}
}
댓글
댓글 쓰기