태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
블로그 이미지
Lonewolf dlbo

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Notice

2011.08.12 13:54 Solutions/Mr.K's Solution
ㅋㅋㅋ

너무 정석대로 풀었나
뭔가 빨리 돌리는 방법이 있을텐뎈ㅋ


#include 
using namespace std;

void zeroset( int ary[][9] );
int numfind( int ary[][9], int bry[][9], int wtf );

int find[10]; // 숫자 k(k번째 원소)를 몇개나 찾았는가에 해당하는 배열

int main()
{
	char str[90];
	int a[9][9]; // 풀어야되는 스도쿠
	int b[9][9]; // 메모지
	int i, j;
	int temp;

	while(1)
	{
		gets(str);

		if( strcmp( str, "end" ) == 0 )
		{
			break;
		}

		for( i = 0; i <= 9; i++ )
		{
			find[i] = 0;
		}

		for( i = 0; i < 9; i++ )
		{
			for( j = 0; j < 9; j++ )
			{
				if( str[i*9+j] == '.' )
				{
					a[i][j] = 0;
				}
				else
				{
					a[i][j] = str[i*9+j] - '0';
					find[a[i][j]]++;
					find[0]++;
				}
			}
		}

		while( find[0] < 81 )
		{
			// 스도쿠 연산
			for( i = 1; i <= 9; i++ )
			{
				zeroset( b );
				for( j = 0; j < 2; j++ )
				{
					if( find[i] < 9 )
					{
						temp = numfind( a, b, i );
					}
					if( temp == 0 )
					{
						// 찾는 숫자가 없거나 숫자 대입을 하지 않았으면 함수를 2번 돌릴 필요가 없음
						j++;
					}
				}
			}
		}

		for( i = 0; i < 9; i++ )
		{
			for( j = 0; j < 9; j++ )
			{
				printf( "%d", a[i][j] );
			}
		}
		printf("\n");
	}

	return 0;
}

void zeroset( int ary[][9] )
{
	int i, j;

	for( i = 0; i < 9; i++ )
	{
		for( j = 0; j < 9; j++ )
		{
			ary[i][j] = 0;
		}
	}
}

int numfind( int ary[][9], int bry[][9], int wtf ) // wtf : isn't what the fu*k, want to find
{
	int i, j, k, m;
	int esc = 1;
	int count;
	int tempr, tempc;

	// wtf 체크
	for( i = 0; i < 9; i++ )
	{
		for( j = 0; j < 9; j++ )
		{
			if( ary[i][j] == wtf )
			{
				bry[i][j] = 2;
				esc = 0;
			}
		}
	}

	// wtf가 현재 스도쿠에 없음
	if( esc == 1 )
	{
		return 0;
	}

	// wtf가 위치할 수 없는 범위 체크
	for( i = 0; i < 9; i++ )
	{
		for( j = 0; j < 9; j++ )
		{
			if( bry[i][j] == 2 )
			{
				for( k = 0; k < 9; k++ )
				{
					bry[i][k] = 1;
					bry[k][j] = 1;
				}
				for( k = (i/3)*3; k < (i/3)*3+3; k++ )
				{
					for( m = (j/3)*3; m < (j/3)*3+3; m++ )
					{
						bry[k][m] = 1;
					}
				}

				bry[i][j] = 2;
			}
		}
	}

	for( i = 0; i < 9; i++ )
	{
		for( j = 0; j < 9; j++ )
		{
			if( ary[i][j] != 0 && bry[i][j] == 0 )
			{
				bry[i][j] = 1;
			}
		}
	}

	// wtf가 유일하게 들어갈 수 있으면 대입
	for( i = 0; i < 3; i++ )
	{
		for( j = 0; j < 3; j++ )
		{
			count = 0;
			for( k = i*3; k < (i+1)*3; k++ )
			{
				for( m = j*3; m < (j+1)*3; m++ )
				{
					if( bry[k][m] == 0 )
					{
						tempr = k;
						tempc = m;
						count++;
					}
				}
			}

			if( count == 1 )
			{
				ary[tempr][tempc] = wtf;
				find[wtf]++;
				find[0]++;
				esc = 1;
			}
		}
	}

	return esc;
}
 
posted by Milkskin

댓글을 달아 주세요

  1. 이건 걍 막 풀면 안됨 ㄷㄷㄷ 모든 가능성에 대해서 DFS 돌려보삼 BFS 돌리면 100% TL걸려 ㄱ-

2011.08.11 20:04 Solutions/Dlbo's Solution
아 나

스도쿠 한번 풀기 더럽게 빡치네

이게 얼마나 걸린거야 -_- 
#include 
#include 

#define SIBAL 750
#define CIBAL 350
#define V SIBAL*CIBAL

int U[V], D[V];
int L[V], R[V];
int C[V], ROW[V];
int H[SIBAL], S[CIBAL];
int size;
char s[10][10];
int nimiral1[SIBAL], nimiral2[SIBAL], OK[87];
char nimhi[SIBAL];

void Link(int r, int c)
{
    S[c]++ ;
	C[size] = c;
    ROW[size] = r;
    U[size] = U[c];
	D[U[c]] = size;
    D[size] = c;
	U[c] = size;

    if (H[r] ==  - 1)
	{
		H[r] = L[size] = R[size] = size;
	}
    else
    {
        L[size] = L[H[r]];
		R[L[H[r]]] = size;
        R[size] = H[r];
		L[H[r]] = size;
    }

    size++ ;
}

void remove(int c)
{
    int i, j;

    L[R[c]] = L[c];
    R[L[c]] = R[c];

    for (i = D[c]; i != c; i = D[i])
    {
        for (j = R[i]; j != i; j = R[j])
        {
            S[C[j]]-- ;
            U[D[j]] = U[j];
            D[U[j]] = D[j];
        }
    }
}

void resume(int c)
{
    int i, j;

    for (i = U[c]; i != c; i = U[i])
    {
        for (j = L[i]; j != i; j = L[j])
        {
            S[C[j]]++ ;
            U[D[j]] = D[U[j]] = j;
        }
    }

    R[L[c]] = L[R[c]] = c;
}

int Jotto(int k)
{
    int i, j, Min, c;

    if (!R[0])
	{
		return 1;
	}

    for (Min = SIBAL, i = R[0]; i; i = R[i])
	{
		if (Min > S[i])
		{
			Min = S[i];
			c = i;
		}
	}

    remove(c);

    for (i = D[c]; i != c; i = D[i])
    {
        for (j = R[i]; j != i; j = R[j])
		{
            remove(C[j]);
		}

        OK[k] = ROW[i];

        if (Jotto(k + 1))
		{
			return 1;
		}

        for (j = L[i]; j != i; j = L[j])
		{
            resume(C[j]);
		}
    }

    resume(c);
    return 0;
}

int main()
{
    int i, j, k, r;
    char st[87];

    while (gets(st))
    {
		if (st[0] == 'e')
		{
			break;
		}

        i = 0;

        for (j = 1; j <= 9; j++)
		{
            for (k = 1; k <= 9; k++)
			{
                s[j][k] = st[i++];
			}
		}
        for (i = 0; i <= 324; i++)
        {
            S[i] = 0;
            D[i] = U[i] = i;
            L[i + 1] = i;
			R[i] = i + 1;
        }

		R[324] = 0;
        size = 325;
        r = 0;
        memset(H,  - 1, sizeof(H));

        for (i = 1; i <= 9; i++)
        {
            for (j = 1; j <= 9; j++)
            {
                if (s[i][j] != '.')
                {
                    r++ ;
                    nimiral1[r] = i;
                    nimiral2[r] = j;
                    nimhi[r] = s[i][j];
                    Link(r, (i - 1)*9 + j);
                    Link(r, 81 + (i - 1)*9 + s[i][j] - '0');
                    Link(r, 162 + (j - 1)*9 + s[i][j] - '0');
                    Link(r, 243 + ((i - 1)/3)*27  + ((j - 1)/3)*9  + s[i][j] - '0');    
                }
                else 
                {
                    for (k = 1; k <= 9; k++)
                    {
                        r++ ;
                        nimiral1[r] = i;
                        nimiral2[r] = j;
                        nimhi[r] = k + '0';
                        Link(r, (i - 1)*9 + j);
                        Link(r, 81 + (i - 1)*9 + k);
                        Link(r, 162 + (j - 1)*9 + k);
                        Link(r, 243 + ((i - 1)/3)*27  + ((j - 1)/3)*9  + k );        
                    }
                }
            }
        }

        Jotto(0);

        for (i = 0; i<81; i++)
		{
            s[nimiral1[OK[i]]][nimiral2[OK[i]]] = nimhi[OK[i]];
		}
        for (i = 1; i<= 9; i++)
		{
            for (j = 1; j <= 9; j++)
			{
                printf("%d", s[i][j] - '0');
			}
		}
        puts("");
    }

    return 0;
}
지금쯤 훈련소를 나왔을 지군에게 이 코드를 바침 -_-
posted by Lonewolf dlbo
TAG 스도쿠

댓글을 달아 주세요

  1. zz 난 당장은 모르겠고

    이번달 안에 풀어보도록 노력하겠음 ㅋㅋㅋㅋ

2011.04.14 22:33 Solutions/Mr.K's Solution



사뿐하게 AC
어려운 문제인줄 알았는데 아니었구만 :)

#include 
using namespace std;

int main()
{
	int n, m, c;
	int temp;

	cin >> n >> m >> c;

	while( (n != 0) || (m != 0) || (c != 0) )
	{
		temp = (n - 7) * (m - 7);

		if( (temp % 2 == 1) && (c == 1) )
		{
			cout << temp / 2 + c << endl;
		}
		else
		{
			cout << temp / 2 << endl;
		}

		cin >> n >> m >> c;
	}

	return 0;
}
posted by Milkskin

댓글을 달아 주세요

  1. 역시 곽 나보다 깔끔해

2011.04.09 15:48 Solutions/Dlbo's Solution
#include 

using namespace std;

int main()
{
	int n, m, c;

	while(cin >> n >> m >> c)
	{
		if (n == 0 && m == 0 && c == 0)
		{
			break;
		}

		if(n < 8 || m < 8)
		{
			cout << 0 << endl;
			continue;
		}

		if(n % 2 != 0 || m % 2 != 0)
		{
			if (c >= 1)
			{
				cout << (m - 7) * (n - 7) / 2 << endl;
				continue;
			}
			else
			{
				cout << (m - 7) * (n - 7) / 2 << endl;
				continue;
			}
		}
		else
		{
			if(c >= 1)
			{
				cout << (m - 8) * (n - 8) / 2 + 1 + (n - 8) / 2 + (m - 8) / 2 << endl;
				continue;
			}
			else
			{
				cout << (n - 8) * (m - 8) / 2 + (n - 8) / 2 + (m - 8) / 2 << endl;
			}
		}
	}
}



부어어어어

귀차니즘. 
posted by Lonewolf dlbo

댓글을 달아 주세요

2011.04.06 20:45 Solutions/Dlbo's Solution
#include 
#include 

char words[101][300], input[10000];
int n, m, now, tot;
int out[10];

void fuck(int x)
{
    int i, k;
    if (x == tot)
    {
        k = 0;

        for (i = 0; input[i]; i++)
        {
            if (input[i] == '#')
			{
                printf("%s", words[now]);
			}
            else
			{
                putchar(out[k++] + '0');
			}
        }

        putchar('\n');

        return;
    }
   

    for (i = 0; i < 10; i++)
    {
        out[x] = i;
        fuck(x + 1);
    }
}

int main()
{
    int i, j;
    while (~scanf("%d", &n))
    {
        getchar();

        for (i = 0; i < n; i++)
		{
            gets(words[i]);
		}

        puts("--");
        scanf("%d", &m);
        getchar();

        for (i = 0; i < m; i++)
        {
            gets(input);
            tot = 0;

            for (j = 0; input[j]; j++)
            {
                if (input[j] == '0')
				{
                    tot++;
				}
            }

            for (j = 0; j < n; j++)
            {
                now = j;
                fuck(0);
            }
        }
    }

    return 0;
}  


ㄹㄹㄹㄹ

걍 단어사전 만들어서

갔다가 이어붙이기 ㄹㄹㄹ
posted by Lonewolf dlbo

댓글을 달아 주세요

2011.03.23 00:44 Solutions/Mr.K's Solution
소점프건은 들보의 코드를 꼼꼼히 읽어보지 않은 내 실수였소 -_-

대충 설명해놓은 뉘앙스라 좀 찜찜하지만, 어쨌든 저게 최상의 풀이인 것 같아 난 손떼기로 ㅋ…
( 일단은 AC 받았기 때문이기도 하고, 가끔은 내가 쓴 코드지만 건드릴 엄두가 안난다 ㅋㅋㅋ )




{ 1000, 10 }에 대한 답을 출력하는데 1분 이상, 5분 이하의 시간이 소요되는듯//
( 엔터쳐놓고 잠깐 보고있다가 이닦고 왔더니 답이 출력되어있어서 그렇게 추정 )

일단 현재 코드는 recursion으로 쓴 상태이고, 
{ 1000, 10 }에 대한 답이 잘 나오는 것으로 보아
이 recursion을 iteration으로 잘 바꾸면 AC 받을듯//

코드는 요 근래 작성한 것 중에 가장 무식하게 작성해놓아서 공개하기가 부끄럽구려 ㅋㅋㅋ
그래도 AC받으면 공개함 ㅋㅋ 
posted by Milkskin

댓글을 달아 주세요

2011.03.19 18:43 Solutions/Dlbo's Solution
#include 
#include 

using namespace std;

set tool;
set::iterator sit;
int tot, n, k, cnt, checker[15][1121];

void maketool()
{
	int i;
	bool isPrime;

	tool.insert(2);
	tool.insert(3);

	for (i = 5; i <= 1120; i += 2)
	{
		isPrime = true;
		for (sit = tool.begin(); sit != tool.end(); sit++)
		{
			if (i % *(sit) == 0)
			{
				isPrime = false;
				break;
			}
		}

		if (isPrime)
		{
			tool.insert(i);
		}
	}
}

int main()
{
	int i, j, k, l;
	set::iterator dit;
	maketool();

	while (cin >> n >> k)
	{
		if (n == 0 && k == 0)
		{
			break;
		}

		memset(checker, 0, sizeof(checker));
		checker[0][0] = 1;

		for(j = 0, dit = tool.begin(); j < tool.size() && *(dit) <= n; j++, dit++)
		{
			for(i = k; i >= 1; i--)
			{
				for(l = n; l >= *(dit); l--)
				{
					checker[i][l] += checker[i - 1][l - *(dit)];
				}
			}
		}
		cout << checker[k][n] << endl;
	}
}

이런 쒯

짜증나게 더럽네 ㄱ-

고생 더럽게 했음요.

처음엔 소수를 tool 셋을 이용해 DFS로 탐색했으나,

100 5만 해도 거의 안드로메다급 탐색시간을 보여줘서 GG

그리고 다시 곰곰히 생각해보니 k가 커봐야 14라는 점을 기억해내고, 저런 알고리즘을 짜내봤습니다.

checker의 k, n번째 있는게 답이고,

소수의 리스트를 전부 싹다 더해보고 비벼보고 하면서 checker 배열에 가능한 갯수들을 체크해

넣어보되, 그 탐색 범위를 소수 내에서, k개 골라서, n보다 작고 현재 검사중인 소수보다 큰 놈을 이용해서

뭐 이거 설명하기도 더럽네 -_-

여튼 그렇게 비비고 볶고 해서 맵을 만들어서(자기 자신만으로 답인거, 2개 합해서 되는거, 3개 해서 되는거, .... k개 해서 되는거) 

로 최종 결산해 답을 가져오는 코드입니다.

진짜 더럽다 ㄱ- 
posted by Lonewolf dlbo

댓글을 달아 주세요

2011.03.16 00:10 Solutions/Mr.K's Solution



정말 간만에 문제를 푼다는 느낌을 제대로 받는구만 ㅋㅋ


그리고 들보자식이 어느정도 사기(?)를 치고 있었다는 것도 알게 되었고//

최근에 올라온 [소점프 ac get] 글은
문제에 나온 예시만 돌려도 답을 얻을 수 없으니까
가급적 빠른 시일 내에 수정하도록 -_-;


// PKU 2181. Jumping Cows

#include 
using namespace std;

int s[150000];
int indexbound;

int calc( int start, int end, int isreverse )
{
	int i;
	int temp;
	int max, maxindex;
	int min, minindex;
	int result = 0;

	max = min = s[start];
	maxindex = minindex = start;
	for( i = start; i <= end; i++ )
	{
		if( max < s[i] )
		{
			max = s[i];
			maxindex = i;
		}
		if( min > s[i] )
		{
			min = s[i];
			minindex = i;
		}
	}

	if( start > end ) { return 0; }

	if( maxindex > minindex && !isreverse )
	{
		if( indexbound < maxindex )
		{
			indexbound = maxindex;
		}
		result += calc( start, maxindex-1, 0 );
		result += calc( maxindex, end, 0 );
	}
	else if( maxindex < minindex && !isreverse )
	{
		result += calc( start, maxindex-1, 0 );
		result += calc( maxindex+1, minindex-1, 1 );
		result += calc( minindex+1, end, 0 );
		result += max - min;
	}
	else if( maxindex > minindex && isreverse )
	{
		result += calc( start, minindex-1, 1 );
		result += calc( minindex+1, maxindex-1, 0 );
		result += calc( maxindex+1, end, 1 );
		result += max - min;
	}
	else if( maxindex < minindex && isreverse )
	{
		result += calc( start, maxindex, 1 );
		result += calc( maxindex+1, end, 1 );
	}
	else if( maxindex == minindex )
	{
		if( indexbound < maxindex )
		{
			indexbound = maxindex;
		}
	}

	return result;
}

int main()
{
	int p;
	int i;
	int height;

	scanf( "%d", &p );

	for( i = 0; i < p; i++ )
	{
		scanf( "%d", &s[i] );
	}

	if( p == 1 )
	{
		printf( "%d\n", s[0] );
	}
	else
	{
		height = calc( 0, p-1, 0 );
		
		// correction
		if( indexbound == 0 )
		{
			height += s[0];
		}
		else
		{
			int i;
			int max, maxindex;
			int min, minindex;

			max = min = s[indexbound];
			maxindex = minindex = indexbound;
			for( i = indexbound; i < p; i++ )
			{
				if( max < s[i] )
				{
					max = s[i];
					maxindex = i;
				}
				if( min > s[i] )
				{
					min = s[i];
					minindex = i;
				}
			}

			if( maxindex == p-1 )
			{
				height += max;
			}
			else
			{
				height += min;
			}
		}

		printf( "%d\n", height );
	}
	
	return 0;
}


풀이를 쓰다가,
내가 만들었던 예시에서 안맞는 부분이 발생하여

일단 풀이는 중단하고 코드만 올려놓았음//

그럼에도 AC가 나온건
아마 pku 서버 내의 테스트케이스를 모두 통과했기 때문이겠지 -_-;;
posted by Milkskin

댓글을 달아 주세요

  1. 역시 철저한 도시남자

  2. 내꺼 안되는 케이스 뽑아줘봐 ㅡ_ㅡ 나 요즘 몸이 진짜 말이 아니어서 코드가 개지랄임 -_-;

  3. 헤이 곽 VS2008 기준으로 내 코드 입력예시 답이 출력예시에 똑같이 나온다.

    근데 내가 보기에도 뭔가 이상하긴 한데 AC는 뜸.

2011.03.14 20:11 Solutions/Dlbo's Solution
#include 
#include 

int cal[1000];

int chk(const void * a,const void * b)
{
	if (*(int*)a > *(int*)b)
	{
		return -1;
	}
	else if (*(int*)a == *(int*)b)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}

int main()
{
	int cases, n, t, w, i, j, max;

	scanf("%d", &cases);
	while(cases--)
	{
		max = 0;
		scanf("%d", &n);
		for (i = 0; i < n; i++)
		{
			scanf("%d", &cal[i]);
			if (cal[i] > max)
			{
				max = cal[i];
			}
		}

		qsort(cal, n, sizeof(int), chk);

		for (i = n - 1; i >= 0; i--)
		{
			if (cal[i] * (i + 1) > max)
			{
				max = cal[i] * (i + 1);
			}
		}

		printf("%d\n", max);
	}

	return 0;
}


우쒸 몸 열라리 아프네요

숨을 못쉬어 -_-

그냥 간단합니다.

제일 약한 로프만큼만 걸 수 있으니까

큰 숫자부터 소트 때려버리고

가장 작은 숫자부터 버틸 수 있는 무게 * 밧줄 갯수

한 값이 가장 크면 그게 답입니다.

간단히 말해서 10 1 15면

15 10 1로 소트해놓고

1부터 역으로 1 * 3은 3이니 최대 3,

10 * 2는 20이니 최대 20

15 * 1은 15니 최대 15

이중 답은 20

요렇게 풀어나가면 간단.
posted by Lonewolf dlbo

댓글을 달아 주세요

2011.03.11 23:00 Solutions/Mr.K's Solution

이것은 마치

2차방정식의 극한값(최대값)을 찾는 문제와 같구려 ㄲㄲ

처음에 정렬함수 만들기가 귀찮아서 라이브러리함수 갖다 쓰려고 잔머리 굴렸다가 wa ㅋㅋㅋㅋ


// PKU 2291. Rotten Ropes

#include 
using namespace std;

void bbsort( int *ary, int length )
{
	int i, j;

	for( i = 0; i < length-1; i++ )
	{
		for( j = length-2; j >= i; j-- )
		{
			if( ary[j] > ary[j+1] )
			{
				swap( ary[j], ary[j+1] );
			}
		}
	}
}

int main()
{
	int t;
	int n;
	int w[1000];
	int i;
	int max;

	scanf( "%d", &t );

	while( t > 0 )
	{
		scanf( "%d", &n );

		for( i = 0; i < n; i++ )
		{
			scanf( "%d", &w[i] );
		}

		bbsort( w, n );

		max = 0;
		for( i = 1; i <= n; i++ )
		{
			if( max < i * w[n-i] )
			{
				max = i * w[n-i];
			}
		}

		printf( "%d\n", max );

		t--;
	}

	return 0;
}

아, 하나 덧붙여서

[소 점프]는 열심히 풀고있음 -_-; 알고리즘은 대강 다 만들었고 수정·보완중//
posted by Milkskin

댓글을 달아 주세요

2011.03.06 13:17 Solutions/Dlbo's Solution
#include 

using namespace std;

int main()
{
	int n, i, j, cnt = 1, sum = 0, total = 0, temp = 0;
	int buf[150000];

	cin >> n ;

	for (i = 0; i < n; i++)
	{
		cin >> buf[i];
	}


	for(j = 1; j <= n; j++)
	{
		if(cnt % 2 != 0)
		{
			if(buf[j - 1] > buf[j])
			{
				temp = buf[j - 1];
				cnt++;
				sum += temp;
			}
		}
		else
		{
			if(buf[j] > buf[j - 1])
			{
				temp = buf[j - 1];
				cnt++;
				sum -= temp;
			}
		}
	}

	cout << sum << endl;

	return 0;
}

시망 -_- 스파킹 이자식 번역 한참 안하더니 이상해졌어

홀수번 포션을 마시면 +, 짝수번 포션을 마시면 -가 아니고, 실제 마신 순서대로 홀수번째 마시면 +, 짝수번째 마시면 -가 됩니다. 어떤 포션이던간에.

거기에, 한번 패스한 포션, 마신 포션은 무조건 패스.

앞에서부터 순차탐색으로 하나하나 오면서, 숫자 큰놈 하나 마시고,

먼저 마신놈보다 작은 숫자 하나 집어마시고,

그다음 다시 또 마시고,

다시 또 먼저 마신것보다 작은 숫자 하나 집어마시면서 진행하면 최대값 나옵니다.
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 이대로 제출한거 맞냐?

    예제만 돌려도 답이 안나올 것 같은데 -_-;

  2. 아…
    답이 안나오는게 아니었구나

    buf[n-1] 뒤로는 초기화가 안되어있어서 저렇게 돌려도 답이 나오네 -_-

    j가 1부터 n-1까지인줄 알았는데 n까지였구나 -_-

2010.12.31 20:14 Solutions/Mr.K's Solution

문제 자주 못풀어서 미안; -_-a



#include 
#include 

int main()
{
	int n;
	int cards;
	int *linear;
	int i, j;
	int ind;

	scanf( "%d", &n );

	while( n > 0 )
	{
		scanf( "%d", &cards );

		linear = (int *) calloc( cards, sizeof(int) );
		
		ind = 0;

		for( i = 1; i <= cards; i++ )
		{
			j = 0;

			while( linear[ind] != 0 )
			{
				ind = (ind + 1) % cards;
			}

			while(1)
			{
				if( linear[ind] == 0 )
				{
					ind = (ind + 1) % cards;
					j++;
					if( j == i )
					{
						while( linear[ind] != 0 )
						{
							ind = (ind + 1) % cards;
						}

						linear[ind] = i;
						break;
					}
				}
				else
				{
					ind = (ind + 1) % cards;
				}
			}
		}

		for( i = 0; i < cards; i++ )
		{
			printf( "%d%c", linear[i], (i == cards-1)? '\n': ' ' );
		}

		free( linear );

		n--;
	}

	return 0;
}
posted by Milkskin

댓글을 달아 주세요

2010.12.24 16:14 Solutions/Dlbo's Solution
#include 
#include 

using namespace std;

void repack(int * target, int * src, int start,int size)
{
	memcpy(target, src + start - size, size);
	memcpy(src, src + start - size, start - size);
	memcpy(src, target, size);
}

int main()
{
	int arr[13], cnt, cases, input, i, movset, temparr[13];

	cin >> cases;
	while (cases--)
	{
		for (cnt = 0; cnt < 13; cnt++)
		{
			arr[cnt] = 0;
		}

		cin >> input;
		cnt = 1;
		while (input)
		{
			for (i = cnt - 1; i >= 0; i--)
			{
				arr[i + 1] = arr[i];
			}
			arr[0] = input;

			if (cnt > 1)
			{
				if (cnt < input)
				{
					movset = input % cnt;
					if (movset == 0)
					{
						cnt++;
						input--;
						continue;
					}
					//repack(temparr, arr, cnt, movset);
					memcpy(temparr, arr + cnt - movset, movset * sizeof(int));
					memcpy(arr + movset, arr, (cnt - movset) * sizeof(int));
					memcpy(arr, temparr, movset * sizeof(int));
				}
				else if (cnt > input)
				{
					//repack(temparr, arr, cnt, input);
					movset = input;
					memcpy(temparr, arr + cnt - movset, movset * sizeof(int));
					memcpy(arr + movset, arr, (cnt - movset) * sizeof(int));
					memcpy(arr, temparr, movset * sizeof(int));
				}
			}
			cnt++;
			input--;
		}

		for (i = 0; i < cnt - 1; i++)
		{
			cout << arr[i] << " ";
		}
		cout << endl;
	}

	return 0;
}
아오 -_-

코딩 너무 오랜만이라 함수 만들었다가 도로 풀고 종이쪼가리에 풀어가면서 했음.

컴파일러 없으니 더럽게 빡시네요.
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 제목 2032 ⇒ 3032 수정좀 :)

2010.11.02 16:29 Solutions/Dlbo's Solution
#include 

int main()
{
	int arr[400][400], n, i, j, max;

	scanf("%d", &n);

	for (i = 0; i < n; i++)
	{
		for (j = 0; j <= i; j++)
		{
			scanf("%d", &arr[i][j]);

			if (i > 1)
			{
				if (j == 0)
				{
					arr[i][j] += arr[i - 1][j];
				}
				else
				{
					arr[i][j] += (arr[i - 1][j - 1] > arr[i - 1][j]) ? arr[i - 1][j - 1] : arr[i - 1][j];
				}
			}
			else if (i == 1)
			{
				arr[i][j] += arr[0][0];
			}
		}
	}

	max = 0;

	for (i = 0; i < n; i++)
	{
		if (arr[n - 1][i] > max)
		{
			max = arr[n - 1][i];
		}
	}

	printf("%d\n", max);
}
흠...

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 2181. Jumping Cows -_- AC get  (2) 2011.03.06
PKU 3032. Card Trick. AC get -_-  (2) 2010.12.24
PKU 3176. Cow bowling. AC get -_-  (0) 2010.11.02
PKU 2260. Error Correction. AC get -_-  (3) 2010.10.28
PKU 3085. Quick Change. AC get -_-  (0) 2010.10.28
PKU 1422. Air Raid. AC get!  (0) 2010.06.24
posted by Lonewolf dlbo

댓글을 달아 주세요

2010.10.28 11:02 Solutions/Dlbo's Solution
#include 

using namespace std;

int main()
{
	int n, horsum, versum, horcnt, vercnt, i, j, x[100][100], cx, cy;
	while (cin >> n)
	{
		horcnt = 0;
		vercnt = 0;
		if (!n)
		{
			break;
		}

		for (i = 0; i < n; i++)
		{
			horsum = 0;
			for (j = 0; j < n; j++)
			{
				cin >> x[i][j];
				horsum = x[i][j] + horsum;
			}

			if (horsum % 2 != 0)
			{
				cx = i;
				horcnt++;
			}
		}

		if (horcnt >= 2)
		{
			cout << "Corrupt" << endl;
			continue;
		}

		for (j = 0; j < n; j++)
		{
			versum = 0;
			for (i = 0; i < n; i++)
			{
				versum = versum + x[i][j];
			}

			if (versum % 2 != 0)
			{
				cy = j;
				vercnt++;
			}
		}

		if (vercnt >= 2)
		{
			cout << "Corrupt" << endl;
			continue;
		}

		if (horcnt == 0 && vercnt == 0)
		{
			cout << "OK" << endl;
		}
		else
		{
			cout << "Change bit (" << cx + 1 << "," << cy + 1 << ")" << endl;
		}
	}

	return 0;
}

이게 바로 무컴파일 AC -_-

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 3032. Card Trick. AC get -_-  (2) 2010.12.24
PKU 3176. Cow bowling. AC get -_-  (0) 2010.11.02
PKU 2260. Error Correction. AC get -_-  (3) 2010.10.28
PKU 3085. Quick Change. AC get -_-  (0) 2010.10.28
PKU 1422. Air Raid. AC get!  (0) 2010.06.24
PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 이것이 진정 ㅋㅋㅋ

2010.10.28 10:30 Solutions/Dlbo's Solution
#include 

using namespace std;

int main()
{
	int sum, peb[5], res[5], num, i, j;


	peb[1] = 25;
	peb[2] = 10;
	peb[3] = 5;
	peb[4] = 1;
	cin >> num;
	for (i = 1; i <= num; i++)
	{
		cin >> sum;
		cout << i << " ";
		for (j = 1; j <= 4; j++)
		{
			res[j] = sum / peb[j];
			sum = sum % peb[j];
		}
		cout << res[1] << " QUARTER(S), " << res[2] << " DIME(S), " << res[3] << " NICKEL(S), " << res[4] << " PENNY(S)" << endl;
	}

	return 0;
}

아으....

컴 겨우 어떻게 살리긴 했는데 컴파일 한번 하고 죽음. -_-;

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 3176. Cow bowling. AC get -_-  (0) 2010.11.02
PKU 2260. Error Correction. AC get -_-  (3) 2010.10.28
PKU 3085. Quick Change. AC get -_-  (0) 2010.10.28
PKU 1422. Air Raid. AC get!  (0) 2010.06.24
PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
PKU 2844. Sum and Product. TLE -_-  (1) 2010.06.22
posted by Lonewolf dlbo

댓글을 달아 주세요

2010.10.07 23:32 Solutions/Mr.K's Solution

매우 쉬운 문제로군요 '-';

그냥 거스름돈을 잘 거슬러 주기만 하면 됩니다 :D

#include 
using namespace std;

int main()
{
	int n, c;
	int i;

	scanf( "%d", &n );

	for( i = 1; i <= n; i++ )
	{
		int temp;

		scanf( "%d", &c );

		printf( "%d ", i );

		temp = c / 25;
		printf( "%d QUARTER(S), ", temp );

		c -= (temp * 25);
		temp = c / 10;
		printf( "%d DIME(S), ", temp );

		c -= (temp * 10);
		temp = c / 5;
		printf( "%d NICKEL(S), ", temp );

		c -= (temp * 5);
		printf( "%d PENNY(S)\n", c );
	}

	return 0;
}
posted by Milkskin

댓글을 달아 주세요

2010.09.07 23:43 Solutions/Mr.K's Solution



간만에 AC받도록 협조(?)해준 스파킹군에게 심심한 감사를 표하며 ㅋㅋ


원리는 간단합니다

모든 "행의 합"들과 "열의 합"들이 짝수가 나오는 경우
"행의 합"들 중 홀수가 1개, "열의 합"들 중 홀수가 1개 나오는 경우

를 제외하고는 전부 "Corrupt"를 출력해주시면 되겠습니다 :)

#include 
using namespace std;

int main()
{
	int size = 1;
	int rowsum[99];
	int colsum[99];

	while(1)
	{
		int i, j;
		int temp;
		int rowodds, colodds;

		scanf( "%d", &size );

		if( size == 0 )
		{
			break;
		}

		for( i = 0; i < size; i++ )
		{
			rowsum[i] = 0;
			colsum[i] = 0;
		}

		for( i = 0; i < size*size; i++ )
		{
			scanf( "%d", &temp );

			rowsum[ i/size ] += temp;
			colsum[ i%size ] += temp;
		}

		rowodds = 0;
		colodds = 0;
		for( i = 0; i < size; i++ )
		{
			if( rowsum[i] % 2 == 1 )
			{
				rowodds++;
			}
		}

		if( rowodds > 1 )
		{
			printf( "Corrupt\n" );
		}
		else
		{
			for( i = 0; i < size; i++ )
			{
				if( colsum[i] % 2 == 1 )
				{
					colodds++;
				}
			}

			if( colodds != rowodds )
			{
				printf( "Corrupt\n" );
			}
			else if( rowodds == 0 )
			{
				printf( "OK\n" );
			}
			else
			{
				for( i = 0; i < size; i++ )
				{
					if( rowsum[i] % 2 == 1 )
					{
						break;
					}
				}

				for( j = 0; j < size; j++ )
				{
					if( colsum[j] % 2 == 1 )
					{
						break;
					}
				}

				printf( "Change bit (%d,%d)\n", i+1, j+1 );
			}
		}
	}

	return 0;
}
posted by Milkskin

댓글을 달아 주세요

2010.08.29 12:19 Solutions/Mr.K's Solution



STLW2로 이사하고나서 처음 올리는 솔루션인 것 같은데

무식하게 탐색해서 그런지 결국 TLE를 먹었군요 -_-;

#include 
using namespace std;

#define MROUTE 30 // maybe most number of routes

// 1st column is departure, 2nd column is destination, 3rd column is delay
// 90 row are most number of streets
int ary[90][3];
int nost = 0; // number of existing streets

// 1st~10th column are passed intersection list, 11th column is total delay, 12th column is length-1
int route[MROUTE][12];
int used_row = 0;

int intersection;

void push( const int depar, int st_nth, int rt_nth, const int depth );
int findroute( const int departure, int destination, int depth );

int main()
{
	int num = 1;
	int min_delay;
	int mdroute;

	scanf( "%d", &intersection );

	while( intersection != 0 )
	{
		int i, j;
		int nodes; // number of destination
		int depar, desti;

		// input data
		for( i = 1; i <= intersection; i++ )
		{
			scanf( "%d", &nodes );

			for( j = 0; (nodes != 0) && (j < nodes); j++, nost++ )
			{
				ary[nost][0] = i;
				scanf( "%d %d", &ary[nost][1], &ary[nost][2] );
			}
		}
		scanf( "%d %d", &depar, &desti );

		// checking
		findroute( depar, desti, 1 );

		// output data
		min_delay = 10000000;
		mdroute = 0;
		for( i = 0; (route[i][0] != 0) && (i < MROUTE); i++ )
		{
			if( min_delay > route[i][10] )
			{
				for( j = 9; j >= 0; j-- )
				{
					if( route[i][j] != 0 )
					{
						break;
					}
				}

				if( route[i][j] == desti )
				{
					min_delay = route[i][10];
					mdroute = i;
				}
			}
		}

		printf( "Case %d: Path =", num );
		for( j = 0; (route[mdroute][j] != 0) && (j < 10); j++ )
		{
			printf( " %d", route[mdroute][j] );
		}
		printf( "; %d second delay\n", min_delay );

		// new map will be check or terminate program
		scanf( "%d", &intersection );

		if( intersection != 0 )
		{
			for( i = 0; i < nost; i++ )
			{
				ary[i][0] = ary[i][1] = ary[i][2] = 0;
			}
			for( i = 0; i < used_row; i++ )
			{
				for( j = 0; j < 12; j++ )
				{
					route[i][j] = 0;
				}
			}

			nost = 0;
			used_row = 0;
			num++;
		}
	}

	return 0;
}

void push( const int depar, int st_nth, int rt_nth, const int depth )
{
	int i;
	int rt_using = 0;

	if( route[rt_nth][0] == 0 )
	{
		route[rt_nth][0] = depar;
		rt_using = 1;
	}
	if( route[rt_nth][11] < depth )
	{
		route[rt_nth][11] = depth;
	}

	for( i = 0; i < 10; i++ )
	{
		if( route[rt_nth][i] == 0 )
		{
			break;
		}
	}

	route[rt_nth][i] = ary[st_nth][1];
	route[rt_nth][10] += ary[st_nth][2];
	used_row += rt_using;
}

int findroute( const int departure, int destination, int depth )
{
	int i, j, k;
	int sentinel = 0;

	if( depth >= intersection )
	{
		return -1;
	}

	for( i = 0; (ary[i][0] != 0) && (i < nost); i++ )
	{
		if( ary[i][1] == destination )
		{
			if( ary[i][0] == departure )
			{
				push( departure, i, used_row, depth );
			}
			else
			{
				sentinel = findroute( departure, ary[i][0], depth + 1 );

				if( sentinel == -1 )
				{
					sentinel = 0;
					continue;
				}

				for( j = 0; (route[j][0] != 0) && (j < MROUTE); j++ )
				{
					if( route[j][route[j][11]] == 0 )
					{
						for( k = route[j][11]; k > 0; k-- )
						{
							if( route[j][k] != 0 )
							{
								break;
							}
						}

						if( route[j][k] == ary[i][0] )
						{
							push( departure, i, j, depth );
						}
					}
				}
			}
		}
	}

	return 0;
}

탐색 방법은 대강 이런식입니다
만들면서 방법이 조금 바뀌긴 했지만;

글로 쓰려고 했는데 정리가 잘 안돼서 그냥 엑셀로 -_-a (크게해서 보세요)

[sample input #1]


posted by Milkskin

댓글을 달아 주세요

  1. 흠; pre태그를 쓰니까 마지막줄에 있는 태그가 안없어지네 -_-;

2010.06.24 10:19 Solutions/Dlbo's Solution


이쯔어 뉴 솔루션!

원리는 예전과 같아요~

다만 구현방식을 2개의 행렬에서 1개의 입력행렬과, 추적을 위한 checked(방문했나, 가능하나)와 followed(이 노드가 널 가르킨다)

의 2개 배열을 이용해 간략화 시켰을 뿐입니다.

처리과정과 결과 완전히 동일합니다.

-_-...

왜 전에껀 WA일까?

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 2260. Error Correction. AC get -_-  (3) 2010.10.28
PKU 3085. Quick Change. AC get -_-  (0) 2010.10.28
PKU 1422. Air Raid. AC get!  (0) 2010.06.24
PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
PKU 2844. Sum and Product. TLE -_-  (1) 2010.06.22
PKU 1050. To the max. get AC -_-;;  (0) 2010.06.01
posted by Lonewolf dlbo

댓글을 달아 주세요

2010.06.23 16:52 Solutions/Dlbo's Solution


쉬바.... 신이시여..

-_-

역시 역무실에서 메모장 코딩에는 한계가 있는건가.

풀이는 간단합니다.

n개의 요소가 있는 그래프에서, 각 노드의 차수를 최소로 하는 신장트리를 구성하면 됩니다.

이렇게 하면 리프노드와 루트의 갯수가 최소화되어, 각 루트와 리프의 갯수만큼만 특공대를 투입하면 최소의 인원만

투입이 가능하지요.

여기서 주의할 점은, 단순히 신장트리가 되는것 뿐만 아니라, 상황에 따라서는 트리가 아닌 포레스트를 다뤄야 합니다.

이로 인해 다중 연결 리스트를 사용해 처리하게 되면 머리가 꽤나 아파집니다.

제 경우는 n개의 intersection에 대해 n * n의 행렬을 사용해 표현했습니다.

일단 found라는, 최초 입력에 따른 유향 그래프와, result라는, 연산 과정과 최종 연산 결과를 담을 2개의 배열을 사용했습니다.

1차로 found에 입력을 받고, 그 내용을 result에 카피합니다.

이후, 1개 거쳐서 가는 방법, 2개 거쳐서 가는 방법, 3개 걸쳐서 가는 방법, ..... n - 1개 거쳐서 가는 방법을 모두 표기합니다.

여기서 일단 n^3의 시간이 소요됩니다.

이 방법으로 나온 결과물에는 root to leaf의 경우와 그 중간 경로가 섞여져 들어가 있습니다.

여기서 다시한번 root to leaf가 아닌 경우를 모두 솎아냅니다.

root to leaf가 아닌 경우는 0으로, 맞는 경우는 전부 1로 바꿔버린 후,

result 안의 내용을 다 더해서 sum에 저장해 버립니다.

이렇게 되면, 자동으로 root to leaf의 갯수를 카운트 할 수 있게 되며, 이 카운트 한 값이 답입니다.

근데.... 왜 WA냐고 -_-

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 3085. Quick Change. AC get -_-  (0) 2010.10.28
PKU 1422. Air Raid. AC get!  (0) 2010.06.24
PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
PKU 2844. Sum and Product. TLE -_-  (1) 2010.06.22
PKU 1050. To the max. get AC -_-;;  (0) 2010.06.01
PKU 2245. Lotto. 에이씨 -_-  (2) 2010.04.06
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 나도 한물 갔어 -_-

    • Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.06.24 20:27  Addr Edit/Del

      ㅋ 늙은이돋네

      나이 얼마나 먹었다고 한물드립이여 ㅋㅋ

2010.06.22 13:03 Solutions/Dlbo's Solution


아오 씨바 빡쳐 -_-;; 이거도 TL이냐?;;;

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 1422. Air Raid. AC get!  (0) 2010.06.24
PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
PKU 2844. Sum and Product. TLE -_-  (1) 2010.06.22
PKU 1050. To the max. get AC -_-;;  (0) 2010.06.01
PKU 2245. Lotto. 에이씨 -_-  (2) 2010.04.06
PKU 2245. Lotto. WA -_- 니미;  (4) 2010.03.21
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 욕쓰지마 이놈아

2010.06.01 23:11 Solutions/Dlbo's Solution


슙라;

이미 푼거였는데 합과곱에 정신팔려서

이미 푼 문제인지 모르고 제껴놓고 있었습니다.

-_-;

이거 그냥 돌리면 TL 그냥 걸립니다.

5 X 5 배열을 받는다고 가정할때,

(0, 0)부터 (0, 4)까진 그냥 받고,

(1, 0)부터 (1, 4)까진 (0, 0)부터 (0, 4)까지의 값을 각각 더해서 저장합니다.

그러니까, (1, 0)에는 (0, 0)의 원래 값과, (1, 0)에 입력받은 값이 더해진채로 저장되는 것이지요.

이후 (2, 1)부터 (4, 2)까지의 부분행렬 내의 값들 합을 구하고 싶다면,

(3, 2)와 (3, 0)을 빼고, (4, 2)에서 (4, 0)를 뺍니다. 또한 (2, 2)에서 (2, 0)을 빼구요.

이 값들은 각각 (3, 1)과 (3, 2)의 합, (4, 1)과 (4, 2)의 합, (2, 1)과 (2, 2)의 합이 되지요.

이 세 값의 합이 원하는 답이 되는겁니다.

간단하지요?

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
PKU 2844. Sum and Product. TLE -_-  (1) 2010.06.22
PKU 1050. To the max. get AC -_-;;  (0) 2010.06.01
PKU 2245. Lotto. 에이씨 -_-  (2) 2010.04.06
PKU 2245. Lotto. WA -_- 니미;  (4) 2010.03.21
PKU 2390. Bank Interest. AC get -_-  (1) 2010.03.07
posted by Lonewolf dlbo

댓글을 달아 주세요

2010.05.29 01:13 Solutions/Mr.K's Solution

으잌ㅋ
3초 안에 답이 안나오는 케이스가 있다닠ㅋㅋㅋ



나 안햌ㅋㅋㅋㅋㅋㅋㅋ


posted by Milkskin

댓글을 달아 주세요

  1. Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.05.29 01:23  Addr Edit/Del Reply

    역대 최장 코딩 -_-;;

2010.05.16 21:09 Solutions/Fanta's Solution

간단한 백트래킹 문제네요.

'Solutions > Fanta's Solution' 카테고리의 다른 글

PKU 2245. Lotto. AC  (0) 2010.05.16
PKU 2390. Bank Interest. AC  (0) 2010.05.16
PKU 2551. Ones. AC  (0) 2010.05.10
PKU 2551. Ones. TLE  (2) 2010.05.09
PKU 3372. Candy Distribution. AC  (1) 2010.02.14
PKU 3224. Go for Lab Cup! AC  (0) 2010.02.01
posted by 지환태
TAG pku

댓글을 달아 주세요

2010.05.16 20:52 Solutions/Fanta's Solution

풀이는 필요 없겠죠

'Solutions > Fanta's Solution' 카테고리의 다른 글

PKU 2245. Lotto. AC  (0) 2010.05.16
PKU 2390. Bank Interest. AC  (0) 2010.05.16
PKU 2551. Ones. AC  (0) 2010.05.10
PKU 2551. Ones. TLE  (2) 2010.05.09
PKU 3372. Candy Distribution. AC  (1) 2010.02.14
PKU 3224. Go for Lab Cup! AC  (0) 2010.02.01
posted by 지환태

댓글을 달아 주세요

2010.05.10 23:55 Solutions/Fanta's Solution
오버플로우를 방지하기 위해
(a * b) % c = ((a % c) * (b % c)) % c
(a + b) % c = ((a % c) + (b % c)) % c
를 사용했습니다.


'Solutions > Fanta's Solution' 카테고리의 다른 글

PKU 2245. Lotto. AC  (0) 2010.05.16
PKU 2390. Bank Interest. AC  (0) 2010.05.16
PKU 2551. Ones. AC  (0) 2010.05.10
PKU 2551. Ones. TLE  (2) 2010.05.09
PKU 3372. Candy Distribution. AC  (1) 2010.02.14
PKU 3224. Go for Lab Cup! AC  (0) 2010.02.01
posted by 지환태
TAG pku

댓글을 달아 주세요

2010.05.09 15:38 Solutions/Fanta's Solution
21을 예로들면

1 = 1
1 + 10 = 11
1 + 10 + 100 = 105 + 6
1 + 10 + 100 + 1000 = 105 + 21 + 966 + 19
1 + 10 + 100 + 1000 + 10000 = 105 + 21 + 966 + 21 + 9996 + 2
1 + 10 + 100 + 1000 + 10000 + 100000 = 105 + 21 + 966 + 9996 + 21 + 99981

오버플로우를 생각 못했네요

'Solutions > Fanta's Solution' 카테고리의 다른 글

PKU 2390. Bank Interest. AC  (0) 2010.05.16
PKU 2551. Ones. AC  (0) 2010.05.10
PKU 2551. Ones. TLE  (2) 2010.05.09
PKU 3372. Candy Distribution. AC  (1) 2010.02.14
PKU 3224. Go for Lab Cup! AC  (0) 2010.02.01
PKU 2845. 01000001. AC  (0) 2010.01.25
posted by 지환태
TAG pku

댓글을 달아 주세요

  1. Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.05.10 22:10  Addr Edit/Del Reply

    11111과 111111의 우변이 잘못되었네요 '-';

    11111 = 105 + 21 + "966" + 21 + 9996 + 2

    111111 = 105 + 21 + "966 + 21" + 9996 + 21 + 99981

2010.05.03 22:04 Solutions/Mr.K's Solution

RE받은거라서 안올리려고 했는데 ( 만약 RE가 아니었다면 WA였겠지만 )

그냥
블로그 돌아가는 느낌은 내야되니까 올려보아요 :)

알고리즘은 "그래프 자료구조"를 이용했다고 생각하시면 됩니다
실제로 그래프를 구현하지는 않았지만 -_-;


이전 솔루션들과 비교했을 때
변수명이 좀 낯설게 보이실 수 있습니다만

최근에 API 공부할 때 보니, API 책에서 변수명 앞에 알파벳을 붙여주는 것이 좋다고 해서
( 이미 전에도 컴공 조교들한테 들었던 얘기인데 귀찮아서 안했는데, API 책의 예제는 싸그리 그런 형식이라서 어쩔 수 없이 '-' )
나름 그런 형식을 지켜본 것입니다 :)

posted by Milkskin

댓글을 달아 주세요

2010.04.06 14:58 Solutions/Dlbo's Solution


에이씨 -_-

저기 잘 보시면 //로 주석처리한 부분이 보이실 껍니다.

그 부분때문에 8개 이상 입력되면 중복출력이 되더군요.

에이씨 -_-
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.04.07 21:23  Addr Edit/Del Reply

    z 에이씨 받아놓고 ac라고 그러네

  2. 인생이여 ㅋㅋ