[코테6_4] Least Recently Used

byeol·2022년 12월 21일
0

코딩테스트

목록 보기
40/42

✔️ 내 답 -> 정답

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+" ");  
 }
}
profile
꾸준하게 Ready, Set, Go!

0개의 댓글