[Unity] UGUI Sprite packer 가 동작하지 않을 때

SpritePacker 의 Pack 버튼을 눌러도 동작하지 않을 때는
1. Resources 폴더 하위에 있는 Sprite 들을 Resources 폴더 밖으로 이미지들을 옮긴다.
2. Edit – Project Setting – Editor – Sprite Packer 의 설정을 Disable로 바꿨다가 다시 Always Enabled 로 바꾼다.
3. 유니티 재시작
4. Window – 2D – Sprite Packer 를 열어 다시 Pack 버튼을 누르면 Packing 이 된다
5. Sprite 들을 다시 원래 위치로 옮긴다.

Please enable desugaring by adding the following to build.gradle 오류

안드로이드 스튜디오에서 빌드시에 오류가 났다.
오류 메세지는 Please enable desugaring by adding the following to build.gradle 이것.
원인을 살펴보니 안드로이드 스튜디오에서 Java 8 을 사용하도록 설정하지 않아서였다.

프로젝트 우클릭 -> Open Module Settion (F4) 메뉴
-> Modules 에서 Source와 Target Compatibility 를 1.8 로 변경해주니 해결~

[Programmers] K번째 수

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하는 문제

JAVA

public static int[] solution(int[] array, int[][] commands) {
        int cnt = commands.length;
        int[] answer = new int[cnt];

        for(int i = 0; i < cnt; ++i){
            answer[i] = getSelectValue(array, commands[i]);            
        }
        //System.out.println("answer ="+Arrays.toString(answer));
        return answer;
    }

    static int getSelectValue(int[] array, int[] command){
        int start = command[0] - 1 ;
        int end = command[1];
        int index = command[2] - 1;
        //System.out.println(start + " / "+end+ " / "+index);
        int[] temp = Arrays.copyOfRange(array, start, end);
        Arrays.sort(temp);
        //System.out.println("temp ="+Arrays.toString(temp));
        return temp[index];
    }    

 

이렇게 해도 됨
public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        for(int i = 0 ; i < commands.length; i++)
        {
            int size = commands[i][1] - (commands[i][0] - 1);
            int[] copyArray = new int[size];
            System.arraycopy(array, commands[i][0] - 1, copyArray, 0, size);
            Arrays.sort(copyArray);
            answer[i] = copyArray[commands[i][2]-1];
        }
        return answer;
    }

블로그 호스팅 이전 완료!

오랜 기간 woobi.co.kr 에서 1년에 만원짜리 호스팅을 쓰다가

속도도 느리고 php 버전 업데이트도 5.6 까지 밖에 안된다고 해서

Amazon Lightsail 로 옮겼다. (https://lightsail.aws.amazon.com)

https://seoulrain.net/2017/07/10/amazon-lightsail/

이분의 블로그를 참고했는데

중간에 도메인 꼬여서 몇번 삽질한거 빼면 아주 쉽게 이전이 가능했다.

워드프레스 블로그 이전의 핵심 포인트는

도메인을 먼저 정리하는 것이다.

과정을 간단히 살펴보면

1. All in on WP Migration 플러그인 - 내보내기를 통해 
워드프레스 백업 파일을 만들고 
(나중에 가져오기 할 때 용량제한이 40메가이므로 40메가 이하로 조정한다.)

2. wp-config.php 에 입력된 기존 도메인을 
호스팅에서 기본 제공해주는 도메인으로 변경한다.
(ex. tedhome.net -> tedhome.woobi.co.kr )

3. Amazon Lightsail 로 넘어와서 워드프레스 인스턴스를 생성한 뒤

4. '홈 - 네트워킹' 메뉴에서 고정 아이피를 만들고

5. '홈 - 네트워킹 - DNS영역 생성'을 통해 DNS레코드를 생성한 다음 
DNS 정보를 입력한다. 
A 레코드 / @.내도메인 / 4번에서 만든 고정아이피
(예 : A레코드 / @.tedhome.net / 10.10.10.1)
C네임레코드 / www.내도메인 / A레코드에 입력한 내 도메인
(예 : C네임레코드 / www.tedhome.net / tedhome.net) 

6. 하단에 도메인 네임 서버가 네개 보이는데 
이것을 도메인 관리 사이트에 가서 네임서버로 등록해주면 
도메인과 4번에서 발급한 고정 아이피의 연결이 완료된다. 
(네임서버 등록은 시간이 조금 걸릴 수 있으니 기다리자.)

7.3번에서 생성한 워드프레스 인스턴스로 가서 
네트워킹 메뉴를 선택하면 'IP고정' 버튼이 보이는데 
이를 선택해서 4번에서 만든 고정아이피를 연결하면 
도메인과 워드프레스를 연결 하게 된다.

이렇게 되고 이 과정외에 기존 블로그 데이터 내보내기 – 가져오기는
All-in-one WP Migration 플러그인이 알아서 해주기 때문에 어려울 것이 없다.

빨라지니까 속이 다 시원하다! ㅎㅎㅎ

[HackerRank] Number of ID

Input값은 숫자로 된 문자열.

이를 재조합 하여 사원 번호를 만든다고 가정할 때 몇개를 만들 수 있는지 찾는 문제.

조건 1 : 사원번호는 8로 시작함

조건 2 : 사원번호는 11자리 숫자로 구성됨

 

public static int numOfIds(string pool)
        {
            List list = new List(pool.ToCharArray());
            //int firstIdx = list.IndexOf('8')+ 1;
            int cnt = list.Count;// - firstIdx;
            int d = cnt / 11;
            int r = cnt % 11;
            Console.WriteLine(string.Format("firstIdx = {0} / cnt ={1} / d = {2} / r = {3}", 0, cnt, d, r));
            string str = "8";
            int tCnt = list.Count(s => str.Contains(s));
            Console.WriteLine("tCnt = "+ tCnt);
            return Math.Min(d, tCnt);
        }

 

[HackerRank] Common Child

주어진 두 문자열중 중복되는 문자를 찾고
연속으로 가장 길게 배치되는 글자 수를 찾는 문제.
(문제 이해하기가 어렵다;;;)

List에 넣어서 하나 하나 비교하는 방식으로 하다가
자꾸 오답이 나서 보니 문제를 잘못이해함.. ㅠ
멘붕와서 포기하고 풀이 검색을 해봤는데

정말 상상도 못할 방법으로 푼 해답을 발견했다.

아니… 대체 왜 이렇게 되는거냐고;;;

이런거 짜는 사람들은 대체 누굴까..;; 

 

https://www.geeksforgeeks.org/longest-common-subsequence-dp-4/

 static int commonChild(string s1, string s2)
        {
            char[] X = s1.ToCharArray();
            char[] Y = s2.ToCharArray();
            int m = X.Length;
            int n = Y.Length;

            int[,] L = new int[m + 1, n + 1];

            for (int i = 0; i <= m; i++)
            {
                for (int j = 0; j <= n; j++)
                {
                    if (i == 0 || j == 0)
                        L[i, j] = 0;
                    else if (X[i - 1] == Y[j - 1])
                        L[i, j] = L[i - 1, j - 1] + 1;
                    else
                        L[i, j] = Math.Max(L[i - 1, j], L[i, j - 1]);
                }
            }
            return L[m, n];
        }
		

[HackerRank] Sparse Arrays

오늘 문제는 너무 기초네..;;; 

주어진 배열안에 검색어가 몇 개인지 찾는 문제..;;

 

static int[] matchingStrings(string[] strings, string[] queries) {
        List result = new List();
        foreach(string q in queries)
        {
            result.Add(GetContainsCount(strings, q));
        }
        return result.ToArray();
    }

    static int GetContainsCount(string[] arr, string q)
    {
        List list = new List(arr);
        int result = list.Count(x => q.Contains(x));
        return result;
    }

[Hackerrank] Left Rotation

 배열 a 중에 특정한 숫자  n을  지정한 횟수 d 만큼 왼쪽으로

로테이션 시키는 문제

 

class Solution {



    static void Main(string[] args) {
        string[] nd = Console.ReadLine().Split(' ');

        int n = Convert.ToInt32(nd[0]);

        int d = Convert.ToInt32(nd[1]);

        int[] a = Array.ConvertAll(Console.ReadLine().Split(' '), aTemp => Convert.ToInt32(aTemp))
        ;

        int[] result = GetRotateArray(n, d, a);
        Console.WriteLine(string.Join(" ", result));
    }

    static int[] GetRotateArray(int n, int d, int[] a)
    {
        int length = a.Length;
        int rCnt = d % length;
        
        int[] resultArray = new int[length];
        for(int i = 0 ; i < length; i++)
        {
            int newIndex = GetIndex(i, length, d);
            resultArray[newIndex] = a[i];
        }
        return resultArray;
    }

    static int GetIndex(int index, int l, int d)
    {
        int result = 0;
        result = index + (l - d); 
        if(result > (l - 1)) result -= l;
       
        return result;
    }
}

 

[HackerRank] Sherlock and Anagrams

문자열내의 Anagram 쌍이 몇개인지 찾는 문제

단어를 잘라서 Lowercase 로 변환, 정렬 후

Dictionary 에  (단어, 갯수) 로 넣어서  계산하는 방식도 될 거 같은데

일단 무식한 방법으로 풀어봤다.

3중for문이라 인풋값에 긴 문자열이 들어오면

타임아웃이 뜬다;;; 

 

static int sherlockAndAnagrams(string s)
        {
            int result = 0;
            for (int i = 1; i < s.Length + 1; i++) //i 는 단어의 길이 점점 늘어남
            {
                List words = new List();
                for (int j = 0; j < s.Length - (i -1); j++)
                {
                    string word = s.Substring(j, i);
                    words.Add(word);
                    Console.WriteLine(j + " , "+ i +" / "+ word);
                }
                Console.WriteLine("words count = "+ words.Count);
                
                for (int k = 0; k < words.Count - 1; k++)
                {
                    for (int l = k + 1; l < words.Count; l++)
                    {
                        if (isAnagram(words[k], words[l]))
                            result++;
                    }
                }
            }

            Console.WriteLine("result = "+result);

            return result;
        }

        static bool isAnagram(string str1, string str2)
        {
            if (str1.Length != str2.Length) return false;

            char[] char1 = str1.ToLower().ToCharArray();
            char[] char2 = str2.ToLower().ToCharArray();

            Array.Sort(char1);
            Array.Sort(char2);

            string nStr1 = new string(char1);
            string nStr2 = new string(char2);
            Console.WriteLine(nStr1 + " / " + nStr2);
            return nStr1.Equals(nStr2);
        }

[HackerRank] New Year Chaos

줄을 서있는데  뒷사람이 앞사람에게 뇌물을 주고 자리를 바꿀 수 있음

한 사람당 2회 가능.

주어진 순서가 되려면 몇번 뇌물이 오고갔는가?

헷갈리네. ㅠ 

 static void minimumBribes(int[] q)
        {
            const int bribePower = 2;
            bool isChaotic = false;
            int n = q.Length;
            for (int i = 0; i  bribePower)
                {
                    Console.WriteLine("Too chaotic");
                    isChaotic = true;
                    break;
                }
            }
            
            int bribeCount = 0;
            if (isChaotic == false)
            {
                for (int i = 0; i < n; i++)
                {
                    Console.WriteLine("i =" + i + "q[i]-2 =" + (q[i] - 2));
                    for (int j = Math.Max(0, q[i]-2); j < i; j++)
                    {
                        Console.WriteLine(" j = "+j);
                        Console.WriteLine(string.Format("q[{0}] : {1} / q[{2}] : {3}", i, q[i], j, q[j]));

                        if (q[j] > q[i])
                        {
                            Console.WriteLine("bribeCount++");
                            bribeCount++;
                        }
                            
                    }
                    Console.WriteLine("========================================");
                }
               
                Console.WriteLine(bribeCount);
            }

        }