출처 : https://programmers.co.kr/learn/courses/30/lessons/42840
효율적인 코드를 작성하는 그날까지 .....개념없고 수포자인 저는.... 연습을 계속 해보려고 합니다 ㅠㅠ
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
int[] answer = {};
if(answers.length <= 0) return answer;
ArrayList<Integer[]> h = new ArrayList<>();
Integer[] h1 = {1, 2, 3, 4, 5};
Integer[] h2 = {2, 1, 2, 3, 2, 4, 2, 5};
Integer[] h3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
h.add(h1);
h.add(h2);
h.add(h3);
ArrayList<Integer> list = new ArrayList<>();
for(int i : answers)
list.add(i);
Stack<Ctx> rst = new Stack<>();
Ctx ctx = new Ctx();
ctx.a = 0;
ctx.b = 0;
rst.add(ctx);
int idxx = 0;
for(Integer[] i : h) {
idxx++;
int val = compare(list , i);
Ctx p = rst.pop();
if(p.b > val) rst.push(p);
else if(p.b < val) {
ctx = new Ctx();
ctx.a = idxx;
ctx.b = val;
rst.push(ctx);
}
else {
rst.push(p);
ctx = new Ctx();
ctx.a = idxx;
ctx.b = val;
rst.push(ctx);
}
}
rst.removeIf(a -> {
return a.a == 0;
});
//rst.sort((a,b) -> {
// return Integer.compare(a.b, b.b);
//});
answer = new int[rst.size()];
for(Ctx c : rst) {
System.out.println(String.format("%d %d" , c.a, c.b));
}
for(int i = 0; i < rst.size() ; i++) {
answer[i] = rst.get(i).a;
}
return answer;
}
public int compare(ArrayList<Integer> list, Integer[] h ) {
int d[] = {0};
int r[] = {0};
/*
Arrays.asList(h).subList(0, ( list.size() > h.length ? h.length : list.size()) ).forEach(x -> {
if(x == list.get(d[0])) r[0]++;
d[0]++;
});
*/
list.forEach(x -> {
if(x == Arrays.asList(h).get(d[0])) r[0]++;
d[0]++;
if(d[0] >= Arrays.asList(h).size() ) {
d[0] = 0;
}
});
return r[0];
}
public class Ctx {
public int a;
public int b;
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 현재 TimeStamp 값 얻기 예제 (0) | 2021.08.23 |
---|---|
MultipartHttpServletRequest 를 통한 업로드 된 multipart/form-data 파일 ContentType 확인 [MIME Type] (0) | 2021.08.17 |
코딩테스트 연습 -> 스택/큐 ->프린터 (0) | 2021.08.13 |
코딩테스트 연습->스택큐->기능개발 (0) | 2021.08.09 |
코딩테스트 ->연습문제->최솟값 만들기 (0) | 2021.08.08 |