posted by pflower 2017. 1. 23. 19:23
  • Docker의 이미지에는 최소한의 기능만 포함되어 추가로 설정해야할 정보가 있다.
  • locale 정보를 한국어로 설정하기 위해 다음과 같은 명령이 필요하다.
1
2
3
4
5
export LANGUAGE=ko_KR.UTF-8
export LANG=ko_KR.UTF-8
locale-gen ko_KR ko_KR.UTF-8
update-locale LANG=ko_KR.UTF-8
dpkg-reconfigure locales


posted by pflower 2016. 9. 30. 17:25

[주의] 멍청한 실수임


vbo를 랜더링 하기 전에 다음 함수들을 호출해주자



glMatrixMode(GL_MODELVIEW);

glLoadIdentity();



vbo->Render();


나는 바보다


'개발 > SFML' 카테고리의 다른 글

[SFML-랜더링] 무한 루프 스크롤 만들기  (0) 2014.07.13
posted by pflower 2015. 12. 3. 17:31

class foo extend Actor {

...


@Override

        public void draw(Batch batch, float parentAlpha) {

            batch.end();


            mPolygonSpriteBatch.setTransformMatrix(batch.getTransformMatrix());

            mPolygonSpriteBatch.begin();


            sprite.draw(mPolygonSpriteBatch);


            mPolygonSpriteBatch.end();


            batch.begin();

        }

...

}


It is very simple, I suddenly know while I saw the core libgdx source code.

we need transformation matrix to applying it.

and the transformation matrix is automatically generated when we call the mutators 

(to rotate, shift, scaling)

for Actors. and it passed by tree like manner.


so, what we have to do is just pick the transformation matrix of Actor (by batch parameter) 

and applying it to the batch object whatever we want.


that's all

posted by pflower 2014. 12. 4. 11:29


Longest Common Subsequence.cpp


#include <iostream>

#include <fstream>

#include <math.h>

#include <string>



#define UP 0

#define LEFT 1

#define MATCH 2


using namespace std;


int mat[100][100];

int c[100][100];

int b[100][100];

std::string x;

std::string y;

void lenlen()

{

//int &ref = cache[]

for(int i = 0; i <= x.length(); i ++)

{

c[i][0] = 0;

}

for(int i = 0; i <= y.length(); i ++)

{

c[0][i] = 0;

}


for(int i = 1; i <= x.length(); i ++)

{

for(int j = 1; j <= y.length(); j ++)

{

if(x[i - 1] == y[j - 1])

{

c[i][j] = c[i - 1][j - 1] + 1;

b[i][j] = MATCH;

}

else if(c[i - 1][j] > c[i][j - 1])

{

c[i][j] = c[i - 1][j];

b[i][j] = UP;

}

else

{

c[i][j] = c[i][j - 1];

b[i][j] = LEFT;

}

}

}

}



void print(int i, int j)

{

if(i == 0 && j == 0)

return;

if(i < 0 || j < 0)

return;

if(b[i][j] == MATCH)

{

print(i - 1, j - 1);

cout << x[i - 1];

}

else if(b[i][j] == UP)

{

print(i - 1, j);

}

else

print(i, j - 1);

}


int main()

{

fstream fin("input.txt");


int n, m;

fin >> n >> m;

fin >> x >> y;

lenlen();

cout << c[n][m] << endl;

print(n, m);

}

'공부 > 알고리즘2' 카테고리의 다른 글

Parallel Sort  (1) 2014.12.04
토너먼트 노멀 케이스 (n != 2^k)  (0) 2014.11.27
Tournament : Bin Packing Problem  (0) 2014.11.20
HIGHEST TOWER BF + TOPOL + GRAPH  (0) 2014.11.13
Topological Sort + Bellman Ford로 O(e) 시간에 풀기  (0) 2014.11.13
posted by pflower 2014. 12. 4. 11:27

#include <iostream>

#include <fstream>

#include <math.h>


using namespace std;


int n;

int mat[100][100];


int main()

{

fstream fin("input.txt");



fin >> n;

for(int i = 0; i < n; i ++)

{

for(int j = 0; j < n; j ++)

fin >> mat[i][j];

}

int v = log((double)n) / log(2.0);

for(int iter = 0; iter < v ; iter++)// 로그엔번

{

for(int i = 0; i < n; i ++)

{

for(int k = 0; k < n; k ++)

{

for(int j = 0; j + 1 < n; j += 2)

{

if( (i % 2) == 0 && mat[i][j] > mat[i][j + 1])

{

std::swap(mat[i][j], mat[i][j + 1]);

}

else if( (i % 2) == 1 && mat[i][j] < mat[i][j + 1])

{

std::swap(mat[i][j], mat[i][j + 1]);

}

}

for(int j = 1; j + 1 < n; j += 2)

{

if( (i % 2) == 0 && mat[i][j] > mat[i][j + 1])

{

std::swap(mat[i][j], mat[i][j + 1]);

}

else if( (i % 2) == 1 && mat[i][j] < mat[i][j + 1])

{

std::swap(mat[i][j], mat[i][j + 1]);

}

}

}

}



cout << endl;

/// 수직 검사

for(int j = 0; j < n; j ++){

for(int k = 0; k < n; k ++)

{

for(int i = 0; i + 1 < n; i += 2) 

{

if( mat[i][j] > mat[i + 1][j])

std::swap(mat[i][j], mat[i + 1][j]);

}


for(int i = 1; i + 1 < n; i += 2) 

{

if( mat[i][j] > mat[i + 1][j])

std::swap(mat[i][j], mat[i + 1][j]);

}

}

}

}


for(int i = 0; i < n; i ++)

{

for(int k = 0; k < n; k ++)

{

for(int j = 0; j + 1 < n; j += 2) 

{

if( mat[i][j] > mat[i][j + 1])

{

std::swap(mat[i][j], mat[i][j + 1]);

}

}


for(int j = 1; j + 1 < n; j += 2) 

{

if( mat[i][j] > mat[i][j + 1])

{

std::swap(mat[i][j], mat[i][j + 1]);

}

}

}

}


for(int i = 0; i < n; i ++)

{

for(int j = 0; j < n; j ++)

cout << mat[i][j] << " ";

cout << endl;

}

}

Parrelel Sort.cpp


posted by pflower 2014. 11. 27. 11:01


checkcheck.cpp

#include <iostream>

#include <fstream>


using namespace std;



int n, m, size;

int tree[1000];

int player[1000];


double Log2( double n )  

{  

    // log(n)/log(2) is log2.  

    return log( n ) / log( 2.0 );  

}


void doBin(int input)

{

int head = 1;

int s = pow(2.0, (ceil(Log2(n) + 0.5) - 1));

int offset = s + s - 1;

int LowExt = 2 * ((n - 1) - (s - 1));


while(head < n) // 찾아가기

{

if(head * 2 >= n)

break;

//if(player[tree[head * 2]] >= player[tree[head * 2 + 1]]) // 왼쪽이 더 크면

if(player[tree[head * 2]] >= input) // 왼쪽이 더 크면

{

head *= 2;

}

else

{

head = head * 2 + 1;

}

}


if(head * 2 > offset) // 최하단 레벨

{

if(player[head * 2 - (offset)] >= input) // 왼쪽이 더 크면

{

player[head * 2 - (offset)] -= input;

//tree[head] = head * 2 - (n - 1); // 왼쪽이 새엄마

}

else

{

player[head * 2 - (offset) + 1] -= input;

//tree[head] = head * 2 - (n - 1) + 1; // 오른쪽이 새엄마

}


// 리프노드 처리

if(player[head * 2 - (offset)] >= player[head * 2 - (offset) + 1]) // 왼쪽이 더 크면

{

tree[head] = head * 2 - (offset); // 왼쪽이 새엄마

}

else

{

tree[head] = head * 2 - (offset) + 1; // 오른쪽이 새엄마

}

}

else // 최하단 레벨 + 1 // k > LowExt

{

if(player[head * 2 - (n - 1) + LowExt] >= input) // 왼쪽이 더 크면

{

player[head * 2 - (n - 1) + LowExt] -= input;

//tree[head] = head * 2 - (n - 1); // 왼쪽이 새엄마

}

else

{

player[head * 2 - (n - 1) + 1 + LowExt] -= input;

//tree[head] = head * 2 - (n - 1) + 1; // 오른쪽이 새엄마

}


// 리프노드 처리

if(player[head * 2 - (n - 1) + LowExt] >= player[head * 2 - (n - 1) + LowExt + 1]) // 왼쪽이 더 크면

{

tree[head] = head * 2 - (n - 1) + LowExt; // 왼쪽이 새엄마

}

else

{

tree[head] = head * 2 - (n - 1) + LowExt + 1; // 오른쪽이 새엄마

}

}


if((n % 2 == 1) && head / 2 == (s - 1 + LowExt / 2) / 2) // 혼재된 구간

{

head = head / 2;

if(player[tree[head * 2]] >= player[head * 2 - (n - 1) + LowExt + 1]) // 왼쪽이 더 크면

{

tree[head] = tree[head * 2]; // 왼쪽이 새엄마

}

else

{

tree[head] = head * 2 - (n - 1) + LowExt + 1; // 오른쪽이 새엄마

}

}


head = head / 2;


while(head > 0) // 트리 올라가면서 복구

{

if(player[tree[head * 2]] >= player[tree[head * 2 + 1]]) // 왼쪽이 더 크면

{

tree[head] = tree[head * 2]; // 왼쪽이 새엄마

}

else

{

tree[head] = tree[head * 2 + 1]; // 오른쪽이 새엄마

}


head = head / 2;

}


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

{

cout << player[i] << " ";

}


cout << endl;

}


void init()

{

int p = -1;

int s = pow(2.0, (ceil(Log2(n) + 0.5) - 1));

int offset = s + s - 1;

int LowExt = 2 * ((n - 1) - (s - 1));

if (n % 2 == 0)

{

 for (int k=1; k<=n; k=k+2) {  

if(k <= LowExt)

{

p = (k +offset)/2;

}

else

{

p = (k - LowExt + n -1)/2;

}

 tree[p] = k; 

 }

}

else { // n 이 홀수

for (int k = 1; k <= LowExt; k=k+2)

p = (k + offset) / 2;

tree[p] = k;

}

for(int k = LowExt  + 2; k <= n; k=k+2 )

p = (k  - LowExt + n - 1) / 2; 

tree[p] = k;

}

}


for (int k = (n-1)/2; k > 0; k--) 

tree[k] = tree[k * 2];

}


int main()

{

fstream fin("input.txt");


fin >> n >> m >> size;


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

{

player[i] = size;

}


init();


for(int i = 0; i < m; i ++)

{

int input;

fin >> input;


doBin(input);

}


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

{

cout << player[i] << " ";

}


cout << endl;


return 0;

}

'공부 > 알고리즘2' 카테고리의 다른 글

Longest Common Subsequence  (0) 2014.12.04
Parallel Sort  (1) 2014.12.04
Tournament : Bin Packing Problem  (0) 2014.11.20
HIGHEST TOWER BF + TOPOL + GRAPH  (0) 2014.11.13
Topological Sort + Bellman Ford로 O(e) 시간에 풀기  (0) 2014.11.13
posted by pflower 2014. 11. 20. 10:37

asdf.cpp


#include <iostream>

#include <fstream>


using namespace std;



int n, m, size;

int tree[1000];

int player[1000];


void doBin(int input)

{

int head = 1;

while(head < n) // 찾아가기

{

if(head * 2 >= n)

break;

//if(player[tree[head * 2]] >= player[tree[head * 2 + 1]]) // 왼쪽이 더 크면

if(player[tree[head * 2]] >= input) // 왼쪽이 더 크면

{

head *= 2;

}

else

{

head = head * 2 + 1;

}

}


if(player[head * 2 - (n - 1)] >= input) // 왼쪽이 더 크면

{

player[head * 2 - (n - 1)] -= input;

//tree[head] = head * 2 - (n - 1); // 왼쪽이 새엄마

}

else

{

player[head * 2 - (n - 1) + 1] -= input;

//tree[head] = head * 2 - (n - 1) + 1; // 오른쪽이 새엄마

}



// 리프노드

if(player[head * 2 - (n - 1)] >= player[head * 2 - (n - 1) + 1]) // 왼쪽이 더 크면

{

tree[head] = head * 2 - (n - 1); // 왼쪽이 새엄마

}

else

{

tree[head] = head * 2 - (n - 1) + 1; // 오른쪽이 새엄마

}


head = head / 2;

while(head > 0) // 올라가면서 복구

{

if(player[tree[head * 2]] >= player[tree[head * 2 + 1]]) // 왼쪽이 더 크면

{

tree[head] = tree[head * 2]; // 왼쪽이 새엄마

}

else

{

tree[head] = tree[head * 2 + 1]; // 오른쪽이 새엄마

}


head = head / 2;

}


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

{

cout << player[i] << " ";

}


cout << endl;

}


void init()

{

int p = -1;

// 인터널 노드 아래 초기화

for (int k = 1; k <= n; k += 2)

{

p = (k + n - 1) / 2;

tree[p] = k;

}

for(int k = (n - 1) / 2 ; k > 0; k --)

{

tree[k] = tree[k * 2];

}

}


int main()

{

fstream fin("input.txt");


fin >> n >> m >> size;


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

{

player[i] = size;

}


init();


for(int i = 0; i < m; i ++)

{

int input;

fin >> input;


doBin(input);

}


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

{

cout << player[i] << " ";

}


cout << endl;


return 0;

}

'공부 > 알고리즘2' 카테고리의 다른 글

Parallel Sort  (1) 2014.12.04
토너먼트 노멀 케이스 (n != 2^k)  (0) 2014.11.27
HIGHEST TOWER BF + TOPOL + GRAPH  (0) 2014.11.13
Topological Sort + Bellman Ford로 O(e) 시간에 풀기  (0) 2014.11.13
RACE bellman Ford  (0) 2014.11.06
posted by pflower 2014. 11. 13. 11:36

#include <iostream>


#include <fstream>




using namespace std;




int v, e;




struct Link


{


Link(int val, int cost)


{


this->val = val;

this->cost = cost;

next = NULL;


}


int val;

int cost;


Link *next;


};




Link* store = NULL;


Link* graph[500];


int seen[500];


int p[1000];

int d[1000];


void dfs(int i)

{


if(seen[i])


return;




seen[i] = true;




for(Link *temp = graph[i]; temp != NULL; temp = temp->next)


{


dfs(temp->val);


}




if(store == NULL)

{

store = new Link(i, 0);

}


else


{


Link *temp = store;

store = new Link(i, 0);

store->next = temp;


}


}




void topological_sort()

{

for(int i = 1; i <= v; i ++)

dfs(i);

}




void bf(int u, int v, int c)

{


   if (d[v] < d[u] + c)

   { 

  d[v] = d[u] + c;

       p[v] = u; 

   }


}



int w[1000];

int h[1000];

int m[1000];


int main()


{


fstream fin("input.txt");




fin >> v;



for(int i = 1; i <= v; i ++)

{

int a, b, c; // 

fin >> a >> b >> c;

w[i] = a;

h[i] = b;

m[i] = c;

}


for(int i = 1; i <= v; i ++)

{

if(graph[0] == NULL)


{


graph[0] = new Link(i, 0);


}


else


{


Link *temp = NULL;


for(temp = graph[0]; temp->next != NULL; temp = temp->next);


temp->next = new Link(i, 0);


}

}


for(int i = 1; i <= v; i ++)

{

for(int j = 1; j <= v; j ++)

{

if(i != j)

{

if(w[i] >= w[j] && m[i] >= m[j])

{

if(graph[i] == NULL)

{


graph[i] = new Link(j, h[i]);


}


else


{


Link *temp = NULL;


for(temp = graph[i]; temp->next != NULL; temp = temp->next);


temp->next = new Link(j, h[i]);


}

}

}

}

}



for(int i = 1; i <= v; i ++)

{

if(graph[i] == NULL)

{


graph[i] = new Link(v + 1, h[i]);


}


else

{


Link *temp = NULL;

for(temp = graph[i]; temp->next != NULL; temp = temp->next);

temp->next = new Link(v + 1, h[i]);

}

}


//for(int i = 0; i < e; i ++)

//{


// int a, b, c;


// fin >> a >> b >> c;


//


//


//}

for(int i = 0; i <= v + 1; i ++) {

d[i] = 0;

}

for(int i = 0; i <= e; i ++) {

p[i] = -1;


}


d[0] = 0;




topological_sort();



for(Link * temp= graph[0]; temp != NULL; temp = temp->next)

{

bf(0, temp->val, temp->cost);

}


for(Link * temp= store; temp != NULL; temp = temp->next)

{


for(Link * head = graph[temp->val]; head != NULL; head = head->next)

{

bf(temp->val, head->val, head->cost);

}

}





int i = v + 1;

while(true) {

i = p[i];

if(i == 0)

break;

cout << i << " ";

}

cout << endl;


cout << "height : " << d[v + 1] << endl;

}

'공부 > 알고리즘2' 카테고리의 다른 글

토너먼트 노멀 케이스 (n != 2^k)  (0) 2014.11.27
Tournament : Bin Packing Problem  (0) 2014.11.20
Topological Sort + Bellman Ford로 O(e) 시간에 풀기  (0) 2014.11.13
RACE bellman Ford  (0) 2014.11.06
maxflow bipar  (0) 2014.11.06
posted by pflower 2014. 11. 13. 09:55

#include <iostream>


#include <fstream>




using namespace std;




int v, e;




struct Link


{


Link(int val, int cost)


{


this->val = val;

this->cost = cost;

next = NULL;


}


int val;

int cost;


Link *next;


};




Link* store = NULL;


Link* graph[500];


int seen[500];


int p[1000];

int d[1000];


void dfs(int i)


{


cout << i << endl;


if(seen[i])


return;




seen[i] = true;




for(Link *temp = graph[i]; temp != NULL; temp = temp->next)


{


dfs(temp->val);


}




if(store == NULL)

{

store = new Link(i, 0);

}


else


{


Link *temp = store;

store = new Link(i, 0);

store->next = temp;


}


}




void topological_sort()

{

for(int i = 1; i <= v; i ++)

dfs(i);

}




void bf(int u, int v, int c)

{


   if (d[v] > d[u] + c)

   { 

  d[v] = d[u] + c;

       p[v] = u; 

   }


}




int main()


{


fstream fin("input.txt");




fin >> v >> e;




for(int i = 0; i < e; i ++)


{


int a, b, c;


fin >> a >> b >> c;



if(graph[a] == NULL)


{


graph[a] = new Link(b, c);


}


else


{


Link *temp = NULL;


for(temp = graph[a]; temp->next != NULL; temp = temp->next);


temp->next = new Link(b, c);


}


}

for(int i = 0; i <= v + 1; i ++) {

d[i] = 987654321;

}

for(int i = 0; i <= e; i ++) {

p[i] = -1;


}


d[0] = 0;





cout << "<--DFS Result-->" << endl;


topological_sort();


cout << "<--Topological Sort Result-->" << endl;


cout << "0" << endl;

for(Link * temp= graph[0]; temp != NULL; temp = temp->next)

{

bf(0, temp->val, temp->cost);

}


for(Link * temp= store; temp != NULL; temp = temp->next)

{

cout << temp->val << endl;


for(Link * head = graph[temp->val]; head != NULL; head = head->next)

{

bf(temp->val, head->val, head->cost);

}

}



cout << "d[i] : " << endl;


for(int i = 0; i <= v + 1; i ++){

cout << d[i] << " ";

}



cout << endl;

}

'공부 > 알고리즘2' 카테고리의 다른 글

Tournament : Bin Packing Problem  (0) 2014.11.20
HIGHEST TOWER BF + TOPOL + GRAPH  (0) 2014.11.13
RACE bellman Ford  (0) 2014.11.06
maxflow bipar  (0) 2014.11.06
maxflow 탈출문제  (0) 2014.11.06
posted by pflower 2014. 11. 6. 11:29

#include <iostream>

#include <fstream>


using namespace std;


fstream fin;


int d[1000];

int p[1000];


int t[1000];

int dist[1000];


int T;

int n;


void bf(int u, int v, int c)

{

   if (d[v] > d[u] + c)

   { 

  d[v] = d[u] + c;

       p[v] = u; 

   }

}


int main()

{

fin.open("input.txt");

fin >> T >> n;


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

fin >> dist[i];

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

fin >> t[i];


t[n + 1] = 0;


for(int i = 0; i <= n; i ++) {

d[i] = 987654321;

p[i] = -1;

}

d[0] = 0;

for(int i = 0;  i <= n; i ++) {

int localLen = 0;

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

localLen += dist[j];

if(localLen > T)

break;

bf(i, j, t[j]);

}

}


int head = n;

int sumtime = 0;

int ans[100];

int iter = 0;


while(head != 0)

{

sumtime += t[head];

ans[iter++] = head;

head = p[head];

}


cout << sumtime << endl;

cout << iter << endl;

for(int i = iter - 1; i >= 0; i --)

{

cout << ans[i] << " ";

}



cout << endl;


return 0;

}

'공부 > 알고리즘2' 카테고리의 다른 글

HIGHEST TOWER BF + TOPOL + GRAPH  (0) 2014.11.13
Topological Sort + Bellman Ford로 O(e) 시간에 풀기  (0) 2014.11.13
maxflow bipar  (0) 2014.11.06
maxflow 탈출문제  (0) 2014.11.06
bfs  (0) 2014.10.16