プログラマーアルゴリズム解答-Kaco 2022-第4題


4.アーチェリー大会
知るところ
コピー
  • オブジェクトのタイプは、深いコピー、浅いコピー
  • です.
  • 複製:複製アレイまたは元のアレイが変更された場合、それらの間の値は
  • のままになります.
    	// 방법 1. 
            int[] a = { 1, 2, 3, 4 };
            int[] b = new int[a.length]; 
            for (int i = 0; i < a.length; i++) {
                b[i] = a[i];
            }
            
    	// 방법 2. clone() 메소드 이용
            int[] a = { 1, 2, 3, 4 };
            int[] b = a.clone();
       
       	// 방법 3. Arrays.copyOf()
            int[] a = { 1, 2, 3, 4 };
            int[] b = Arrays.copyOf(a, a.length);
            
    	// 방법 4.  Arrays.copyOfRange()
             int[] a = { 1, 2, 3, 4 };
            int[] b = Arrays.copyOfRange(a, 1, 3); //[2,3]
  • 浅いレプリケーション:レプリケーションされたアレイまたは元のアレイが変更されると、その値は
  • とともに変更されます.
            int[] a = { 1, 2, 3, 4 };
            int[] b = a;
    解決策
  • backtrack&DFS
  • ソースコード
    class Solution {
        static int nn;
        static int apeech[];
        static int lion[];
        static int res[]={-1};
        static int max=-10000;
        
        public void dfs(int l) {
            if (l==nn) { // 종료
                int a_point=0;
                int l_point=0;
                for (int i=0;i<11;i++) {
                    if (apeech[i]!=0 || lion[i]!=0) {
                        if (lion[i]>apeech[i]) {
                            l_point+=10-i; // 라이언이 점수 가져감
                        }else {
                            a_point+=10-i;
                        }
                    }
                }
                
                if (l_point>a_point) { // 값 갱신
                    if (l_point-a_point>=max) {
                        max=l_point-a_point;
                        res=lion.clone();
                    }
                }
                
                
            }else {
                for (int j=0;j<11;j++) {
                    if (lion[j]<=apeech[j]) { //작거나 같을경우에만 돌림, 라이언이 더 커지면 dfs를 더 돌 필요없음.
                        lion[j]++;
                        dfs(l+1);
                        lion[j]--;
                    } else {
                        break;
                    }
                }
            }
            
            
        }
        
        public int[] solution(int n, int[] info) {
            // int[] answer = {};
            apeech=info.clone();
            nn=n;
            lion=new int[11];
            dfs(0);
            return res;
        }
    }
    リファレンス
  • https://velog.io/@qodlstjd12/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Kakao-%EC%96%91%EA%B6%81-%EB%8C%80%ED%9A%8C-Java
  • https://coding-factory.tistory.com/548