문자열을 숫자로 변경 코드

Programming/Algorithm 2016. 3. 9. 16:45 Posted by gaeddong2
1
2
3
4
5
6
7
8
int matoi(char *s){
 int num = 0;
 for (int i = 0; s[i] != NULL; i++) {
  num *= 10;
  num += s[i] - '0';
 }
 return num;
}
cs


'Programming > Algorithm' 카테고리의 다른 글

멱집합 (백트래킹 예제)  (0) 2016.03.10
회문 찾기 알고리즘  (0) 2016.03.10
사다리타기 (알고리즘)  (0) 2016.03.09
미로찾기 알고리즘 (BFS)  (0) 2016.03.09
DFS 자료구조 (재귀활용)  (0) 2016.03.09

사다리타기 (알고리즘)

Programming/Algorithm 2016. 3. 9. 14:30 Posted by gaeddong2
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <stdio.h>
 
#define MAX 101
 
#define LEFT 0
#define RIGHT 2
#define BOTTOM 3
 
int Arr[MAX][MAX];
int Visited[MAX][MAX];
int Num;
 
//왼쪽, 위쪽, 오른쪽, 아래쪽
int dx[4= { -1010 };
int dy[4= { 0-101 };
 
int MinCnt;
//int Cnt;
int result;
void input()
{
 int i, j;
 
 MinCnt = 9999;
 scanf("%d"&Num);
 for (i = 1; i < MAX; i++)
 {
  for (j = 1; j < MAX; j++)
  {
   scanf("%d"&Arr[i][j]);
   Visited[i][j] = 0;
  }
 }
}
//Check함수에서는 양 옆에 길이 있는지 확인한다.
//왼쪽, 오른쪽 둘다 길이 없으면 아래로 간다.
//왼쪽과 오른쪽에 우선순위를 둔다.
int CheckFun(int y, int x, int start)
{
 
 if (y + dy[LEFT] > 0 && y + dy[LEFT] < MAX && 
  x + dx[LEFT] >  0 && x + dx[LEFT] < MAX
  && Arr[y + dy[LEFT]][x + dx[LEFT]] == 1
  && Visited[y + dy[LEFT]][x + dx[LEFT]] == 0)
   return LEFT;
 
 else  if (y + dy[RIGHT] > 0 && y + dy[RIGHT] < MAX &&
  x + dx[RIGHT] >  0 && x + dx[RIGHT] < MAX
  && Arr[y + dy[RIGHT]][x + dx[RIGHT]] == 1
  && Visited[y + dy[RIGHT]][x + dx[RIGHT]] == 0)
  return RIGHT;
 else
  return BOTTOM;
}
void process(int y, int x, int start, int Cnt)
{
 //종료 조건
 if (y == MAX - 1)
 {
  if (MinCnt > Cnt)
  {
   result = start;
   MinCnt = Cnt;
  }
  return;
 }
 //현재 갈 수 있는 길이 왼쪽인 경우, Visited Check 한 후 재귀 호출
 if (CheckFun(y, x, start) == LEFT)
 {
  Visited[y + dy[LEFT]][x + dx[LEFT]] = 1;
  process(y + dy[LEFT], x + dx[LEFT], start, ++Cnt);
 }
 else if (CheckFun(y, x, start) == RIGHT)
 {
  Visited[y + dy[RIGHT]][x + dx[RIGHT]] = 1;
  process(y + dy[RIGHT], x + dx[RIGHT], start, ++Cnt);
 }
 else if (CheckFun(y, x, start) == BOTTOM)
 {
  Visited[y + dy[BOTTOM]][x + dx[BOTTOM]] = 1;
  process(y + dy[BOTTOM], x + dx[BOTTOM], start, ++Cnt);
 }
}
void output()
{
 printf("#%d %d\n", Num, result - 1);
}
int main(void)
{
 freopen("input.txt""r", stdin);
 freopen("output.txt""w", stdout);
 
 int TC = 10;
 int start = 0;
 int i, j;
 while (TC--)
 {
  input();
  //가장 윗줄이 1인 지점이 출발지점
  for (start = 1; start < MAX; start++)
  {
   if (Arr[1][start])
   {
    for (i = 1; i < MAX; i++)
    {
     for (j = 1; j < MAX; j++)
     {
      Visited[i][j] = 0;
     }
    }
    Visited[1][start] = 1;
    process(1, start, start, 0);
   }
  }
  output();
 }
 return 0;
}
cs


'Programming > Algorithm' 카테고리의 다른 글

회문 찾기 알고리즘  (0) 2016.03.10
문자열을 숫자로 변경 코드  (0) 2016.03.09
미로찾기 알고리즘 (BFS)  (0) 2016.03.09
DFS 자료구조 (재귀활용)  (0) 2016.03.09
DFS 자료구조(반복문 활용)  (0) 2016.03.09

미로찾기 알고리즘 (BFS)

Programming/Algorithm 2016. 3. 9. 10:00 Posted by gaeddong2
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include<stdio.h>
 
#define MAX 100
 
void input();
void output(); 
void process();
void push(int v);
int pop();
int TC;
 
char in[MAX];
int arr[MAX][MAX];
int Visited[MAX][MAX];
 
int dx[4= { -1010 };
int dy[4= { 0-101 };
 
int sx, sy, ex, ey;
 
int Stx[MAX];
int Sty[MAX];
int top = -1;
 
int resultflag;
int resultcnt;
void input()
{
 int i, j;
 
 top = -1;
 resultflag = 0;
 
 scanf("%d"&resultcnt);
 for (i = 0; i < MAX; i++)
 {
  //입력을 String으로 받음
  scanf("%s", in);
  for (j = 0; j < MAX; j++)
  {
   Visited[i][j] = 0;
   arr[i][j] = in[j] - '0';
 
   //출발 좌표 저장
   if (arr[i][j] == 2)
   {
    sx = j;
    sy = i;
 
   }
   //도착 좌표 저장
   if (arr[i][j] == 3)
   {
    ex = j;
    ey = i;
   }
  }
 }
}
void process()
{
 int i;
 // Start 좌표 Push
 Stx[++top] = sx;
 Sty[top] = sy;
 
 Visited[sy][sx] = 1;
 
 //스택이 비었을 때까지 계속해서 돈다.
 while (top != -1)
 {
  int TempX;
  int TempY;
 
  TempX = Stx[top];
  TempY = Sty[top--];
  for (i = 0; i < 4; i++)
  {
   // 1 ) 현재까지 방문하지 않았는 경우
   // 2 ) 가려는 지점이 1이 아닌 경우
   // 3 ) Index가 범위를 벗어나지 않는 경우
   if (Visited[TempY + dy[i]][TempX + dx[i]] == 0
    && arr[TempY + dy[i]][TempX + dx[i]] != 1
    && TempX + dx[i] > -1 && TempX + dx[i] < MAX
    && TempY + dy[i] > -1 && TempY + dy[i] < MAX)
   {
    //PUSH 및 Visited = 1
    Stx[++top] = TempX + dx[i];
    Sty[top] = TempY + dy[i];
    Visited[TempY + dy[i]][TempX + dx[i]] = 1;
 
    //도착한 지점이 3인 경우 Flag 발생
    if (arr[TempY + dy[i]][TempX + dx[i]] == 3)
    {
     resultflag = 1;
     return;
    }
   }
  }
 }
}
void output()
{
 if (resultflag == 1)
 {
  printf("#%d %d\n", resultcnt, resultflag);
 }
 else
  printf("#%d %d\n", resultcnt, resultflag);
 
}
int main(void)
{
 
 freopen("input.txt""r", stdin);
 freopen("output.txt""w", stdout);
 
 TC = 10;
 
 while (TC--)
 {
  input();
  process();
  output();
 }
 return 0;
}
cs


'Programming > Algorithm' 카테고리의 다른 글

문자열을 숫자로 변경 코드  (0) 2016.03.09
사다리타기 (알고리즘)  (0) 2016.03.09
DFS 자료구조 (재귀활용)  (0) 2016.03.09
DFS 자료구조(반복문 활용)  (0) 2016.03.09
stack(스택) 자료구조  (0) 2015.05.07