목차
📢 문제 출처
https://www.acmicpc.net/problem/25556
25556번: 포스택
포닉스가 순열을 청소할 수 있으면 YES, 불가능하다면 NO를 출력한다.
www.acmicpc.net
⏰ 문제 설명
⏰ 다른 풀이
⏰ 입출력 예시
⏰ 풀이
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> li = new ArrayList<>();
int n = sc.nextInt();
//값을 넣어준다.
for (int i = 0; i < n; i++) {
li.add(sc.nextInt()); //n의 갯수대로 값을 넣는다.
}
String[] elements = sc.nextLine().split(" ");
// Integer형 스택 선언
Stack<Integer>[] stackInt = new Stack[4];
//4개의 스택 삽입
for (int i = 0; i < 4; i++) {
stackInt[i] = new Stack<>();
stackInt[i].push(0); //비교를 위해서 가장 작은 수인 '0'을 넣는다.
}
//list의 사이즈만큼 반복문 설정
for (int i = 0; i < n; i++) {
boolean bFlag = false;
//StackList 갯수만큼 반복
for (int j = 0; j < 4; j++) {
if(stackInt[j].peek() < li.get(i)) //스택 맨 위에 것을 꺼냈을 때 스택에 있는 것보다 크면 저장
{
stackInt[j].push(li.get(i)); //ArrayList의 (i)번째 인덱스를 Get한다.
bFlag = true;
break;
}
}
if(!bFlag) {
System.out.println("NO");
return;
}
}
System.out.println("YES");
}
}
- 값을 담은 후에 다음 값이 이전 값보다 크면 같은 스택에, 작은 값이라면 다른 스택에 담는다.
- 예를 들어 첫 번째 스택에 4를 넣고, 두 번째 스택에 3를 넣었는데, 그 다음 값이 3보다 큰 6이기 때문에 첫 스택 위치로 돌아가서 조건을 다시 처리한다.
📈 값의 출력 풀이
- 첫 번째 스택 : 4, 6, 7, 8, 9, 10
- 두 번째 스택 : 3, 5
- 세 번째 스택 : 2
- 네 번째 스택 : 1
- 예를 들어 첫 번째 스택에 4를 넣고, 두 번째 스택에 3를 넣었는데, 그 다음 값이 3보다 큰 6이기 때문에 첫 스택 위치로 돌아가서 조건을 다시 처리한다.
- 이렇게 모든 값을 꺼냈을 때 오름차순으로 꺼내지는 것을 확인 할 수 있다.
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[Java][백준 2743번] : 단어 길이 재기 (0) | 2023.08.10 |
---|---|
[Java][백준 10818번] : 최소, 최대 (0) | 2023.08.09 |
[Java][백준 1021번] : 회전하는 큐 (0) | 2023.08.09 |
댓글