2020년 6월 3일 수요일

Unity[유니티] List SearchLogic[검색기능]



/// <summary>
    /// 검색할 인자를 dict에 저장한다음에 원하는 것만 불러온다
    /// </summary>
    /// <param name="name">검색하려는 targetName</param>
    public void Search(string name)
    {
    
        //idx에 따른 검색 요소가 있는 것들을 List로 저장하기 위해 선언한 변수
        Dictionary<intList<int>> targetdic = new Dictionary<intList<int>>();

        //key 추가
        for (int i = 0i < m_slabList.Counti++)
        {
            targetdic.Add(i,new List<int>());
        }

        //있는지 체크해서 dict에 저장
        for (int i = 0i < m_slabList.Counti++)
        {
            List<intinsideIdx = new List<int>();
            for (int k = 0k < m_slabList[i].mySlabs.Countk++)
            {
                if (m_slabList[i].mySlabs[k].Contains(name))
                {
                    insideIdx.Add(k);
                }
                targetdic[i] = insideIdx;
            }
        }
        



        bool isable = false;

        foreach (var x in targetdic)
        {
            //하나라도 검색할수있으면 가능하다
            if (x.Value.Count != 0)
            {
                isable = true;
                break;
            }
        }

        //하나도 없다면 그냥 return
        if (!isable)
            return;

       
        //dict에 있는 리스트만 활성화하기!!
        for (int i = 0i < m_slabList.Counti++)
        {           
            if (targetdic[i].Count == 0)
            {
                m_slabList[i].populateGrid.tmp_SetActiveAllFalse();
            }
            else
            {
                m_slabList[i].populateGrid.tmp_SetActiveFalse(targetdic[i]);
            }
        }
        

    }




[코딩테스트] 크레인 인형뽑기 (python)



문제 설명

게임개발자인 죠르디는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다.
죠르디는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다.

crane_game_101.png

게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 5 x 5 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓이게 됩니다. 다음 그림은 [1번, 5번, 3번] 위치에서 순서대로 인형을 집어 올려 바구니에 담은 모습입니다.

crane_game_102.png

만약 같은 모양의 인형 두 개가 바구니에 연속해서 쌓이게 되면 두 인형은 터뜨려지면서 바구니에서 사라지게 됩니다. 위 상태에서 이어서 [5번] 위치에서 인형을 집어 바구니에 쌓으면 같은 모양 인형 두 개가 없어집니다.

crane_game_103.gif

크레인 작동 시 인형이 집어지지 않는 경우는 없으나 만약 인형이 없는 곳에서 크레인을 작동시키는 경우에는 아무런 일도 일어나지 않습니다. 또한 바구니는 모든 인형이 들어갈 수 있을 만큼 충분히 크다고 가정합니다. (그림에서는 화면표시 제약으로 5칸만으로 표현하였음)

게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.

[제한사항]
  • board 배열은 2차원 배열로 크기는 5 x 5 이상 30 x 30 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • 0은 빈 칸을 나타냅니다.
    • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.
입출력 예
boardmovesresult
[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]][1,5,3,5,1,2,1,4]4
입출력 예에 대한 설명

입출력 예 #1

인형의 처음 상태는 문제에 주어진 예시와 같습니다. 크레인이 [1, 5, 3, 5, 1, 2, 1, 4] 번 위치에서 차례대로 인형을 집어서 바구니에 옮겨 담은 후, 상태는 아래 그림과 같으며 바구니에 담는 과정에서 터트려져 사라진 인형은 4개 입니다.

crane_game_104.jpg




정답 및 풀이



[코딩테스트] 스킬트리.py (python)



문제 설명

선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.

예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.

위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다.

선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.

제한 조건
  • 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
  • 스킬 순서와 스킬트리는 문자열로 표기합니다.
    • 예를 들어, C → B → D 라면 CBD로 표기합니다
  • 선행 스킬 순서 skill의 길이는 1 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다.
  • skill_trees는 길이 1 이상 20 이하인 배열입니다.
  • skill_trees의 원소는 스킬을 나타내는 문자열입니다.
    • skill_trees의 원소는 길이가 2 이상 26 이하인 문자열이며, 스킬이 중복해 주어지지 않습니다.
입출력 예
skillskill_treesreturn
"CBD"["BACDE", "CBADF", "AECB", "BDA"]2
입출력 예 설명
  • BACDE: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트립니다.
  • CBADF: 가능한 스킬트리입니다.
  • AECB: 가능한 스킬트리입니다.
  • BDA: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트리입니다.


배운점
pop이라는 자료구조를 좀 이용하자...
인덱스를 순서대로 비교할 일이 생긴다면 
pop을 활용하여 보자!!!

정답 및 풀이




[numpy]파이썬 numpy array index 찾기(numpy.where)

2020년 6월 2일 화요일

python editor PyCharm [파이썬 에이터 파이참] Debuging onerow[한줄씩 디버깅]

비쥬얼 스튜디오 : f10
파이참 : Alt + Shift + E  이거는 먼지 모르게씀

아니고 F8을 누르면 순차적으로 다음다음 진행한다



Unity[유니티] List SearchLogic[검색기능]



    /// <summary>
    /// 검색 조건과 내용으로 테이블에 있는 데이터를 검색하는 메서드
    /// </summary>
    /// <param name="value">검색 조건</param>
    /// <param name="input">검색 내용</param>
    /// <param name="sort">오름차순 or 내림차순
    /// true이면 내림차순, false이면 오름차순</param>
    /// <returns>검색 결과</returns>
    public List<FixtureItemDataSearchTableData(int valuestring inputbool sort)
    {
        Func<FixtureItemDataboolcondition//검색 조건
        Func<FixtureItemDataobjectorder//정렬 기준
        string search = input.ToLower(); //소문자로 변환

        if (value < 0 || value >= searchDropdown.options.Count)
            return new List<FixtureItemData>();

        switch (searchDropdown.value) //Dropdown value에 따라 조건 설정
        {
            case 0// 제조사
                condition = item => item.company.ToLower().Contains(search);
                order = item => item.company;
                break;
            case 1// 조명 이름
                condition = item => item.name.ToLower().Contains(search);
                order = item => item.name;
                break;
            case 2// 채널
                condition = item => item.channelList.Count.ToString().Contains(search);
                order = item => item.channelList.Count;
                break;
            default//모드
                condition = item => item.mode.ToLower().Contains(search);
                order = item => item.mode;
                break;
        }

        int i = 1;
        IEnumerable<FixtureItemDataresult;

        if (isLibraryTab)
            result = originTableData.Where(condition);
        else
            result = favoriteTableData.Where(condition);

        result = sort ? result.OrderByDescending(order) : result.OrderBy(order);
        result = result.Select(x => new FixtureItemData
        {
            key = x.key,
            no = i++.ToString(),
            company = x.company,
            name = x.name,
            channelList = x.channelList,
            mode = x.mode,
            isSelect = x.isSelect
        });

        return result.ToList();
    }



2020년 5월 30일 토요일

링크드 리스트 워커 러너 테크닉

LC # 876 middle of the linked List

문제)
링크드 리스트가 주어졋을때 가운데 값을 반환하라
짝수이면 뒤에것 반환하라

//워커 러너 테크닉
//walker : 한번에 한칸씩
//runner : 한번에 두칸씩
//runner가 끝나면 walker는 중간에 와있음
//구현문
while(runner != null)
{
    runner = runner.next;
    if(runner != null)
    walker = walker.next;
    runner = runner.next;
}

return walker;

git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...