[C++]BOJ 2529 - 부등호

[C++]BOJ 2529 - 부등호

가장 큰 수를 구할 때


  1. 앞자리에 9를 넣고 시작한다.

  2. 다음 부등호가 “<” 라면 부등호 다음 수를 9로 만들고 그전의 자리에는 -1을 해준다.

  3. “>” 라면 사용 안 했던 수 중에 가장 큰 수를 넣는다.
    이런 방식으로 부등호 개수만큼 반복한다.


가장 작은 수를 구할 때


  1. 앞자리에 0을 넣고 시작한다.

  2. 다음 부등호가 “>” 라면 부등호 다음 수를 0으로 만들고 그전의 자리에는 +1을 해준다.

  3. “<” 라면 사용 한했던 수 중에 가장 작은 수를 넣는다.

  4. 이런 방식으로 부등호 개수만큼 반복한다.

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
#include <iostream>
using namespace std;
int main()
{
short a[10];
short p[10] = {0, };
short k;
cin >> k;
char b[10];
for(int i = 0; i < k; i++)
cin >> b[i];
short po = 0;
a[0] = 9;
p[9] = 1;
for(int i = 0; i < k; i++)
{
if(b[i] == '<')
{
a[i+1] = a[i];
for(int j = po; j < i+1; j++)
p[--a[j]] = 1;
}
if(b[i] == '>')
{
po = i + 1;
for(int j = 9; j > -1; j--)
if(p[j] == 0)
{
a[i + 1] = j;
p[j] = 1;
break;
}
}
}
for(int i = 0; i <= k; i++)
cout << a[i];
cout << endl;
short l[10] = {0, };
po = 0;
a[0] = 0;
l[0] = 1;
for(int i = 0; i < k; i++)
{
if(b[i] == '>')
{
a[i+1] = a[i];
for(int j = po; j < i+1; j++)
l[++a[j]] = 1;
}
if(b[i] == '<')
{
po = i + 1;
for(int j = 0; j < 10; j++)
if(l[j] == 0)
{
a[i + 1] = j;
l[j] = 1;
break;
}
}
}
for(int i = 0; i <= k; i++)
cout << a[i];
}

for 문 굳이 2번 돌릴 필요 없이 함수로 짜면 깔끔할 듯하다.