✔️ 내 답 -> 정답
import java.util.*;
class Main{
public static int[] solution(int s, int n, int[] arr){
int[] cash = new int[s];
cash[0]=arr[0];
for(int i=1;i<n;i++){
// cash에 x가 포함되지 않았다면
if(contain(cash,arr[i])==false){
for(int j= s-2;j>=0;j--) {
cash[j+1]=cash[j];
}
cash[0]=arr[i];
}
else{
for(int t=s-1;t>=0;t--){
if(cash[t]==arr[i]) {
for(int j=t-1;j>=0;j--)
cash[j+1]=cash[j];
}
}
cash[0]=arr[i];
}
}
return cash;
}
public static boolean contain(int[] arr, int v){
for(int i=0;i<arr.length;i++){
if(arr[i]==v) {
return true;
}
}
return false;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
int s = kb.nextInt();
int n = kb.nextInt();
int[] arr = new int[n];
for(int i=0;i<n;i++) arr[i]=kb.nextInt();
for(int x : solution(s,n,arr)) System.out.print(x+" ");
}
}
내가 풀면서 저 자리에 break라는 걸 넣었다.
의도는 만약에 같은 값을 발견하게 되면
같은 값이 있는 그 자리의 전 자리부터 0까지 돌기 때문에 굳이 바깥 for문(t를 가지고 있는)을 돌지 않도록 나가게 하려는 의도였다.
그!러!나!
보면
문제가 있다.
if를 거치지 않아도 바깥 for문을 빠져나간다.
즉 같은 값 발견 못해도 나가버린다.
그래서 빼버렸고
정답이었다.
그러나 저 break를 이동해서 좀 더 효율적인 정답으로 완성해보자
break를 if문 안으로 이동해야 한다.
그래야 정답이다~!
✔️ 강의 답
나처럼 하나의 메소드를 별도로 만들지 않고 간단하게 해결
import java.util.*;
class Main{
public static int[] solution(int s, int n, int[] arr){
int[] cash = new int[s];
int pos=-1;
for(int x: arr){
for(int i=0;i<s;i++) if(cash[i]==x) pos=i;
if(pos==-1) {
for(int i=s-1;i>=1;i--)
cash[i]=cash[i-1];
}
else {
for(int i=pos;i>=1;i--)
cash[i]=cash[i-1];
}
cash[0]=x;
pos=-1;
}
return cash;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
int s = kb.nextInt();
int n = kb.nextInt();
int[] arr = new int[n];
for(int i=0;i<n;i++) arr[i]=kb.nextInt();
for(int x : solution(s,n,arr)) System.out.print(x+" ");
}
}