:: Study Recursion Function

::: How replay function self

function sum(arr, n) {
  // Only change code below this line
  // :: When n is 0 or minus, Don't Sum anything.
  // ::: also When you last Index
  if(n <= 0) {
    return 0;
  } else {
    // :: Remember first value and Call <Next : self(n - 1)>
    return arr[n - 1] + sum(arr, n - 1);
  }
  // Only change code above this line
}
블로그 이미지

RIsN

,

D2 : Intro Animation

Spine2D 2020. 11. 8. 22:47

:: Version : A

: 2020-10-28


: Dogma / Coin Intro

: Just Simple Animations


블로그 이미지

RIsN

,

백준 10172 : 개 // 성공

C# 2020. 11. 7. 22:03

아래 예제와 같이 개를 출력하시오.

없음.
개를 출력한다.

:: 성공

: 개선점 : 없음

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Print02
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("|\\_/|");
            Console.WriteLine("|q p|   /}");
            Console.WriteLine("( 0 )\"\"\"\\");
            Console.WriteLine("|\"^\"`    |");
            Console.WriteLine("||_/=\\\\__|");
        }
    }
}

'C#' 카테고리의 다른 글

백준 10998 : A×B  (0) 2020.11.13
백준 1008 : A/B  (0) 2020.11.12
백준 10171 : 고양이 // 성공  (0) 2020.11.06
백준 1874 : 스택 수열 // 실패  (0) 2020.11.05
백준 10828 : 스택 // 실패  (0) 2020.11.04
블로그 이미지

RIsN

,

아래 예제와 같이 고양이를 출력하시오.

없음.
고양이를 출력한다.

:: 성공

: 개선점 : 없음

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Print01
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: Print Cat
            Console.WriteLine("\\    /\\");
            Console.WriteLine(" )  ( ')");
            Console.WriteLine("(  /  )");
            Console.WriteLine(" \\(__)|");

            // :: End Program
            //Console.ReadKey();
        }
    }
}

'C#' 카테고리의 다른 글

백준 1008 : A/B  (0) 2020.11.12
백준 10172 : 개 // 성공  (0) 2020.11.07
백준 1874 : 스택 수열 // 실패  (0) 2020.11.05
백준 10828 : 스택 // 실패  (0) 2020.11.04
백준 4949: 균형잡힌 세상 // 성공  (0) 2020.11.01
블로그 이미지

RIsN

,

스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다.

1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라.

첫 줄에 n (1 ≤ n ≤ 100,000)이 주어진다. 둘째 줄부터 n개의 줄에는 수열을 이루는 1이상 n이하의 정수가 하나씩 순서대로 주어진다. 
물론 같은 정수가 두 번 나오는 일은 없다.

:: 실패 이유 : 컴파일 에러

: 개선하지 않는 이유 : 뭐가 문제인지 모르겠다.

: 프로그램 자체는 문제가 말하는 대로 흘러가는데, 정작 컴파일 에러가 계속 뜬다.

: C#은 대체로 전부 문제가 많은 게 아닐까?

: 질문 되면 질문을 올려보고, 안되면 다른 언어로 도전 고려

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace Stack05
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: Initialise
            Stack<int> stack = new Stack<int>();
            List<bool> processChecker = new List<bool>(); 
            Queue<int> input = new Queue<int>();

            // :: Input Command
            int commandSize = Int32.Parse(Console.ReadLine()); // :: CommandSize
            for(int i = 0; i < commandSize; i++)
            {
                // :: Save Input in Queue
                input.Enqueue(Int32.Parse(Console.ReadLine()));
            }

            // :: Start Program
            for (int i = 1; i <= commandSize; i++)
            {
                // :: Push
                stack.Push(i);
                processChecker.Add(true);

                // :: If stack has remains & current stack last value same as input first value;
                while (stack.Count != 0 && stack.Peek() == input.Peek())
                {
                    // :: Pop & input Queue dequeue
                    stack.Pop();
                    processChecker.Add(false);
                    input.Dequeue();
                }
            }
            
            // :: If stack has something : error
            if(stack.Count() != 0)
            {
                Console.WriteLine("NO");
            }
            // :: else print process
            else
            {
                foreach (var itm in processChecker)
                {
                    Console.WriteLine("{0}", itm == true ? "+" : "-");
                }
            }

            // :: End Program
            // Console.ReadKey();
        }
    }
}

'C#' 카테고리의 다른 글

백준 10172 : 개 // 성공  (0) 2020.11.07
백준 10171 : 고양이 // 성공  (0) 2020.11.06
백준 10828 : 스택 // 실패  (0) 2020.11.04
백준 4949: 균형잡힌 세상 // 성공  (0) 2020.11.01
백준 9012 : 괄호 // 성공  (0) 2020.10.31
블로그 이미지

RIsN

,

백준 10828 : 스택 // 실패

C# 2020. 11. 4. 23:39

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 
둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 
문제에 나와있지 않은 명령이 주어지는 경우는 없다.

:: 실패 이유 : 시간초과

: 개선하지 않는 이유 : 뭐가 문제인지 모르겠다.

: 문제를 못 맞춰서 다른 사람 코드도 볼 수 없고, C# 관련 구글 검색해서 갖다 붙여도 시간초과로 실패함

: 10개 안 풀어서 질문을 올릴 수도 없음, 10개 이상 풀고나서 다음에 확인할 것.

using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace Stack01
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: Initialise
            Stack stack = new Stack();

            // :: Check Command Size
            string input = Console.ReadLine();
            int commandSize = 0;
            try
            {
                commandSize = Int32.Parse(input);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            List<string> inputList = new List<string>();
            // :: Loop Command with Size
            for (int i = 0; i < commandSize; i++)
            {
                string temp = Console.ReadLine();
                inputList.Add(temp);
            }

            foreach (var itm in inputList)
            {
                CheckCommand(itm, stack);
            }

            // :: End Program
            // Console.ReadKey();
        }

        // :: Check Command with String
        public static void CheckCommand(string input, Stack stack)
        {
            string[] command = input.Split(' ');
            switch (command[0])
            {
                case "push":
                    try
                    {
                        int temp = Int32.Parse(command[1]);
                        stack.Push(temp);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                    break;
                case "pop":
                    Console.WriteLine(stack.Pop());
                    break;
                case "size":
                    Console.WriteLine(stack.GetSize());
                    break;
                case "empty":
                    Console.WriteLine(stack.CheckEmpty());
                    break;
                case "top":
                    Console.WriteLine(stack.GetTop());
                    break;
            }
        }
    }

    public class Stack
    {
        private List<int> data;
        private int top;

        public Stack()
        {
            data = new List<int>();
            top = -1;
        }

        public void Push(int input)
        {
            data.Add(input);
            top += 1;
        }

        public int Pop()
        {
            if (top < 0)
            {
                return -1;
            }

            int temp = data[top];
            data.RemoveAt(top);
            top -= 1;

            return temp;
        }

        public int GetTop()
        {
            if (top < 0)
                return top;

            return data[top];
        }

        public int GetSize()
        {
            return data.Count();
        }

        public int CheckEmpty()
        {
            return data.Count() > 0 ? 0 : 1;
        }
    }
}

'C#' 카테고리의 다른 글

백준 10171 : 고양이 // 성공  (0) 2020.11.06
백준 1874 : 스택 수열 // 실패  (0) 2020.11.05
백준 4949: 균형잡힌 세상 // 성공  (0) 2020.11.01
백준 9012 : 괄호 // 성공  (0) 2020.10.31
백준 10773 : 제로 // 성공  (0) 2020.10.30
블로그 이미지

RIsN

,

::キー入力(上下左右)で動く

youtu.be/5nzEYsQzBNw

>>改善すべき:もっと自然な数値(数式)設定?

using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using UnityEngine;

public class HeroA : MonoBehaviour
{
    // :: Variables : Easy to Use
    private CharacterController controller;
    private Animation anim;
    // :: Enums : Animation Key
    private enum eAnimation
    {
        [Description("idle@loop")]
        IDLE,
        [Description("run@loop")]
        RUN,
        [Description("walk@loop")]
        WALK
    }


    // Start is called before the first frame update
    void Start()
    {
        // :: Easy to use for : CharacterController
        controller = this.gameObject.GetComponent<CharacterController>();
        // :: Easy to use for : Animation
        anim = this.gameObject.GetComponent<Animation>();
    }

    // :: for use enum Description
    private string GetEnumDescription(eAnimation value)
    {
        FieldInfo fi = value.GetType().GetField(value.ToString());
        var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);

        var descriptionString = attributes.Select(ele => ele.Description).FirstOrDefault();

        if(descriptionString != null)
        {
            return descriptionString;
        }
        return value.ToString();
    }

    // Update is called once per frame
    void Update()
    {
        // :: 1.1 Input key (up, down) check
        float forwardInput = Input.GetAxisRaw("Vertical");

        // :: 2 Rotate with key (left, right) check
        float rotateInput = Input.GetAxisRaw("Horizontal");
        this.transform.Rotate(Vector3.up * rotateInput * 0.5f);

        // :: 3# Change Animation
        // ::: Run
        if (forwardInput != 0)
        {
            anim.Play(this.GetEnumDescription(eAnimation.RUN));

            // :: 1.2 Move forward and Backward
            this.controller.Move(this.transform.forward * forwardInput * Time.deltaTime);
        }
        // ::: Just Rotate
        else if(rotateInput != 0){
            anim.Play(this.GetEnumDescription(eAnimation.WALK));
        }
        // ::: No Move
        else
        {
            anim.Play(this.GetEnumDescription(eAnimation.IDLE));
        }


        //this.transform.Rotate(0, 1, 0);
        //controller.Move(this.transform.forward * 0.01f);
    }
}
블로그 이미지

RIsN

,

【공모전】 : LEGO x Unity Micro Game

【프로젝트명】 : Blockfall

  • Waterfall(폭포)와 비슷한 어감

【게임】 : 하러가기

 

【목표】 : 최우수상

【결과】 : 진행중

 

【간단 설명】 : 연동되어 떨어지는 블록을 넘어 닭을 구출

【컨셉】

  • 고전 레고
  • 구출 스토리
  • 최대한 자극적, 폭력적, 경쟁적이지 않을 것
  • 난이도 하 ⇒ 난이도 중

【레퍼런스 게임】 : 없음

 

【현 상황:2020-11-16】 : 완료

youtu.be/IV6Fteb04gE

 

【리미트 설정】

  1. 레고 스크립트의 수정 없음
  2. 타 에셋 사용 없음

【구현 설계】

  1. 2차원 [2][2] 블록 맵 작성 : 완료
  2. [0][0]을 스타트 지점으로 [1][1]을 트로피 지점으로 작성 : 완료
  3. PlayerPrefs에 현재 스테이지를 저장, 트로피를 얻으면 승리 화면 : 완료
    1. 기존 튜토리얼 Scene을 수정해서 사용 : 완료
  4. 승리 화면에서 NextStage 버튼을 누르면 현재 스테이지 +1 상승 후 다시 Main 씬 로드 : 완료
  5. 현재 스테이지에 맞춰서 2차원 블록 맵이 확장 : 완료
  6. 밟으면 블록이 떨어져 제거
    1. 밟은 블록 확인 : 완료
    2. (테스트) 밟은 블록 색깔 변화 : 완료
    3. 새로이 색깔 변화 스크립트를 만들어서 블록에 붙임 : 완료
    4. 블록이 떨어져 제거 : 완료
  7. 2개의 블록 링크 및 링크된 블록 색깔 변화 : 완료
  8. :: [BUG] : 스테이지 재 로드 시 블록이 분해되어 작동 안함 : 해결 완료
    1. 블록 스크립트를 만들어서 Prefab에 저장? or Touch 블록을 사용해서 스크립트 실행이 되나 확인? : 실패
    2. Prefab에 LEGO Behaviour Block을 붙임 : 성공
      1. 해결 과정 : Behaviour Block이 붙어있는 것은 재 로드시 분해되지 않는 결과가 있었기에 그것을 활용
  9. 스타트 블록과 마지막 블록을 제외하고 모든 블록 링크 : 완료
  10. 링크 블록 같이 떨어져 제거 : 완료
  11. 최종 스코어 저장 : 완료
  12. 실패 시 PlayerPrefs 초기화 및 첫 스테이지부터 시작 : 완료
    1. :: [방향 수정] 하드코어 스테이지 작성, 하드코어 스테이지 이상일 시 다시 하드코어 스테이지 처음으로 초기화 : 완료
  13. 난이도 조절
    1. Enemy Low : 완료
    2. Enemy Mid : 완료
    3. Stage 7 이후 대각선 제거 : 완료
    4. Enemy High : 완료
      1. 닿으면 플레이어를 부수는 레고 캐릭터(하자드) : 완료
    5. BOSS, 거대 보스, 3개의 트로피도 모두 획득하라? : 완료
      1. :: [방향 수정] 보스만 존재 : 난이도 중하 : 완료
  14. 프로젝트 정리 및 코드 정리 : 완료
    1. In Game의 Touch the object를 Touch & Save the Chicken으로 변경 : 완료
    2. 한글화 : 완료
  15. <I want Elsa Lego!!!>가 들어간 Credit 만들기 : 스킵
  16. 승리 / 패배 씬 작성 : 완료
    1. :: [컨셉] 친구 닭들을 구하는 기사
  17. 레고를 사용한 심플 이펙트 설치 : 완료
  18. 4.11f로 다운그레이드 : 완료
  19. BGM  : 완료
  20. QA : 완료
  21. 빌드 및 제출 : 완료

 

【스크립트 구조】

Scripts.zip
0.03MB

 

 

Dictator(총괄)
: 사라지지 않음, 중복 불가
: 씬의 이동과 초기화를 관리

[Scene]_Ruler
: 씬의 지배자
: 기본적인 움직임과 시나리오, 각 치프들은 룰러가 지배함

[Scene]_GOCheif
: 씬의 UI를 제외한 것들의 움직임을 관리하는 팀장
: 다만 움직임을 설정만 해서 룰러에게 제공할 뿐, 실제로 움직이는 것은 룰러의 일

[Scene]_GOHolder
: 씬의 UI를 제외한 것들의 GameObject를 보관하고 있는 홀더

[Scene]_UIChief
: 씬의 UI의 움직임을 관리하는 팀장
: GOChief랑 거의 하는 일은 같음

[Scene]_UIHolder
: 씬의 UI GameObject를 보관하는 홀더

// [그 외 스크립트]
: 각 독립 오브젝트들의 움직임을 관리 : 룰러의 지배를 받지 않음 : 효용성과 구조에 대한 고찰 필요

【해당 프로젝트로 학습한 사항】

  • 스크립트 구조에 대한 설계
    • 움직이는 관리자(치프)와 갖고 있는 홀더를 나누고, 그 관리자를 지배하는 시나리오 메이커(룰러)와 모든 씬을 총괄하는 총괄(딕테이터)을 놓아 두는 구조
    • 장점 : 어디서 문제가 생기는 지, 코드를 다시 보았을 때 구조에 대한 이해가 빠름
    • 현재 개선점 : 독립적인 부분 등에 대한 관리가 필요
  • 작성한 스크립트가 아닌 타 스크립트와의 연계
블로그 이미지

RIsN

,

>> 캐릭터 Citizen을 사용해서 Lego 움직임과 비슷하게 하기

:: 우선 정리 필요

블로그 이미지

RIsN

,

세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다.

정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다.

문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다.

  • 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 한다.
  • 모든 왼쪽 대괄호("[")는 오른쪽 대괄호("]")와만 짝을 이뤄야 한다.
  • 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다.
  • 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다.
  • 짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 한다.

정민이를 도와 문자열이 주어졌을 때 균형잡힌 문자열인지 아닌지를 판단해보자.

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다.

입력의 종료조건으로 맨 마지막에 점 하나(".")가 들어온다.

:: 성공

: 요점은 좀 더 줄이는 방법이 없을까?

: Dictionary?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Stack04
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "";
            while(true)
            {
                // :: Input
                input = Console.ReadLine();

                // :: End
                if (input == ".")
                    break;

                // :: Initialise
                Stack<String> bracketA = new Stack<String>();
                bool isError = false; // ::: Check Error

                // :: Check String
                foreach(var itm in input)
                {
                    // :: Input "(" or "[" in Stack
                    if(itm.ToString() == "(" || itm.ToString() == "[")
                    {
                        bracketA.Push(itm.ToString());
                    }
                    // :: Take "(" or "[" when ")" or "]"
                    else if(itm.ToString() == ")" || itm.ToString() == "]")
                    {
                        // :: Stack has something
                        if(bracketA.Count > 0)
                        {
                            // :: When Peek is "("
                            if(bracketA.Peek() == "(")
                            {
                                // :: Matched and Pop it
                                if (itm.ToString() == ")")
                                {
                                    bracketA.Pop();
                                }
                                // :: Not matched
                                else
                                {
                                    isError = true;
                                }
                            }
                            // :: When Peek is "["
                            else if (bracketA.Peek() == "[")
                            {
                                // :: Matched and Pop it
                                if(itm.ToString() == "]")
                                {
                                    bracketA.Pop();
                                }
                                // :: Not matched
                                else
                                {
                                    isError = true;
                                }
                            }
                        }
                        // :: Stack has nothing
                        else
                        {
                            isError = true;
                        }
                    }
                }

                // :: When isError or Stack has remains
                if (bracketA.Count > 0 || isError == true)
                {
                    Console.WriteLine("no");
                }
                // :: Success : Stack has nothing and isError = false
                else
                {
                    Console.WriteLine("yes");
                }
            }
        }
    }
}

'C#' 카테고리의 다른 글

백준 1874 : 스택 수열 // 실패  (0) 2020.11.05
백준 10828 : 스택 // 실패  (0) 2020.11.04
백준 9012 : 괄호 // 성공  (0) 2020.10.31
백준 10773 : 제로 // 성공  (0) 2020.10.30
Study : Quick Sort  (0) 2020.10.26
블로그 이미지

RIsN

,