나는 이 문제를 힌트 없이 풀어보려고 시도했다가
한 3시간 동안 엉뚱하게 출력되는 결과만 보고있었다..ㅋ큐ㅠㅠ
나의 접근 방법은
문제를 그대로 읽어서 그대로 코드화 하는것이었는데
그러면 풀 수 없는 문제였다.
이 문제는
오름차순으로 출력
할 수 있도록
입력된 숫자들을 4개의 스택
에 담을 수 있는가?
라고 받아들였어야 했다.
랜덤
으로 담아서 스택 4개 중에 의도
하여 출력이라고 써있지만,
풀이를 위한 접근으로는 의도
해서 담아 의도
한 결과를 출력할수 있는가? 였던 것... ㅠㅠ
정답을 맞춘 코드는 다음과 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int[] stack = new int[]{0, 0, 0, 0};
int value;
boolean isPossible = true;
while (isPossible && st.hasMoreTokens()) {
value = Integer.parseInt(st.nextToken());
isPossible = false;
for (int i = 0; i < stack.length; i++) {
if (stack[i] < value) {
stack[i] = value;
isPossible = true;
break;
}
}
}
if (isPossible) System.out.println("YES");
else System.out.println("NO");
}
}
int[] stack = new int[]{0, 0, 0, 0};
// 4개의 스택의 top부분을 담당할 배열
int value;
// StringTokenizer로 분리한 문자를 정수로 변환하여 비교를 위해 잠시 저장해둘 변수
boolean isPossible = true;
// stack에 값이 저장되었는지를 알려고 만든 변수
// isPossible이 false가 된 채로 stack배열의 탐색이 끝나면
// value가 stack에 저장되지 못한 것이기 때문에 while 반복문 종료되며 "NO" 출력
while (isPossible && st.hasMoreTokens()) {
// 반복문 종료조건: isPossible이 for문을 진행 한 뒤에도 false 이거나,
// StringTokenizer 로 가져온 문자가 더이상 없으면 종료
value = Integer.parseInt(st.nextToken());
// StringTokenizr로 분리해온 문자1을 정수로 변환해서 value에 담음
isPossible = false;
// value 변수가 스택에 담길 수 있는지 확인하기 위한 변수
// 담길 수 있는 조건 : stack에 들어있는 값 보다 value 값이 더 커야됨
for (int i = 0; i < stack.length; i++) {
// 스택이 4개이므로 4번 반복되는 반복문
if (stack[i] < value) {
// stack의 첫번째 값(문제에서 말하는 4개중 1개 스택의 top 값)이 value보다 작은가?
stack[i] = value;
// 그렇다면 해당 위치에 value를 집어넣는다.
isPossible = true;
// value가 stack에 저장되었으니 true
break;
// value가 stack에 저장되었으니 for문 끝냄
}
// 만약 여기로 나오게 된다면 value는 stack에 담기지 못한것으로,
// isPossible 값은 false가 된다. -> while 조건문을 통과하지 못하고 종료
}
}
// if() -> isPossible이 true : 모든 값이 stack에 담김
if (isPossible) System.out.println("YES");
else System.out.println("NO");
// else -> isPossible이 false : stack에 담기지 못한 값이 존재함
그리고 아래는 내가 내맘대로 직독직해 하고 작성해서
엉뚱한 결과만 출력되는 가엾은 코드....🥹
import java.util.ArrayList;
import java.util.Random;
public class Main {
public static void main(String[] args) {
int N = 10;
String Ns = "4 3 6 7 8 9 10 2 1 5";
ArrayList<ArrayList<Integer>> list = new ArrayList();
list.add(new ArrayList());
list.add(new ArrayList());
list.add(new ArrayList());
list.add(new ArrayList());
for (String s: Ns.split(" ")) {
Random r = new Random();
list.get(r.nextInt(4)).add(0, Integer.parseInt(s));
}
int min = 100001;
int minIdx = -1;
ArrayList<Integer> result = new ArrayList<>();
while (list.size() > 0) {
for (int j = 0; j < list.size(); j++) {
if (list.get(j).size() == 0) {
list.remove(j);
continue;
}
if (min > list.get(j).get(0)) {
min = list.get(j).get(0);
minIdx = j;
}
}
result.add(min);
list.get(minIdx).remove(0);
if (list.get(minIdx).size() == 0) {
list.remove(minIdx);
}
min = 100001;
minIdx = -1;
}
System.out.println(result);
}
}