💡 오름차순 수열 구현
임의의 수열을 스택에 넣었다가 출력하는 방식으로 오름차순 수열을 출력할 수 있는지 확인.
출력할 수 있다면 push와 pop 연산을 어떤 순서로 수행해야 하는지 알아내는 프로그램 작성.
push 연산은 +, pop 연산은 -, 불가능 할 때는 NO 출력.
static int AA = 5;
static int[] BB = {3,4,5,6,7};
public static void main(String[] args) {
// average(A, B);
stack(AA, BB);
}
// Stack의 오름차순 수열 구현
// 수열의 개수 a, 수열[] b
public static String stack(int a, int[] b) {
int[] A = new int[a];
for (int i=0; i<a; i++) {
A[i] = b[i];
}
Stack<Integer> stack = new Stack<>();
StringBuffer bf = new StringBuffer();
// 오름차순의 수
int num = 1;
boolean flag = true;
for (int i=0; i<A.length; i++) {
// 현재 수열의 수
int su = A[i];
System.out.println("su = " + su);
// 현재 수열 값 >= 오름차순의 자연수
// pop()을 수행해 수열을 꺼낸다
if (su >= num) {
// push
while (su >= num) {
stack.push(num++);
bf.append("+\n");
}
stack.pop();
bf.append("-\n");
// 현재 수열값 < 오름자순의 자연수
// pop()을수행해 수열을 꺼낸다
} else {
int n = stack.pop();
// 스택의 가장 위의 수가 만들어야 하는 수열의 수보다 크면 수열 출력 불가
if (n > su) {
System.out.println("NO");
flag = false;
break;
} else {
bf.append("-\n");
}
}
}
if (flag) {
System.out.println(bf.toString());
}
return bf.toString();
}
'Data Architect > Algorithm' 카테고리의 다른 글
Bubble Sort (0) | 2023.03.08 |
---|---|
Stack을 이용한 오큰수 구현 (1) | 2023.03.08 |
DFS(Recursion, Stack) & BFS(Queue) 구현 (1) | 2023.03.07 |
Queue 구현 (0) | 2023.03.07 |
Stack 구현 (0) | 2023.03.07 |