6월, 2019의 게시물 표시

Unity - Json 을 활용할 때 알아두면 좋은 명령어

이미지
Json Utility-  https://docs.unity3d.com/ScriptReference/JsonUtility.html FromJson<T>, FromJsonOverwrite, ToJson 요 세 가지가 있다. 코드 예시를 살펴보자면 주석에는 빼먹었는데 클래스에 직렬화 [System.Serializable] 가 필요하다. 각 기능별로 코드 한 줄이면 충분하다! 클래스 변수 하나하나 코드를 짜서 텍스트를 변환할 필요가 없다. fromjson, fronjsonoverwrite의 경우  File.ReadReadAllText(string path) 명령어로 json 파일을 읽어들인 후 결과 string을 그대로 입력시켜주기만 하면 된다. ToJson의 경우 클래스의 모든 변수 값들이 json 문자열로 변환된다. 이걸 그대로 File.WriteAllText 명령어에 집어넣어서 json 파일을 만들어낼 수 있다!! 구현 코드 역시 간단. 유니티 내에서 간단하게 Window 를 만들어서 테스트  잘 저장된다. 주의점 :  물론 클래스 별로 멤버 변수가 다르니 생성되는 json 파일 역시 다르다!! 잘못하면 호환되지 않는 json 파일을 클래스에 덮어 씌울 수도 있다. 호환성 문제를 고려해야 한다.  개인적으로는 json 파일을 읽은 뒤 제일 앞줄의 ID를 먼저 확인. 그 다음에 클래스에 Load 한다.

Unity - Dialogue 시스템을 구현할 때 유용한 무료 에셋

이미지
Vide Dialogue 홈페이지 -  https://videdialogues.wordpress.com/tag/unity/ 에셋스토어 -  https://assetstore.unity.com/packages/tools/ai/vide-dialogues-69932 무료 에셋들을 이것저것 찾아보고 깃허브 오프소스 쪽도 훑어봤는데 요게 제일 괜찮았다. - 유니티 내에서 Vide Editor 윈도우를 따로 하나 만들어서 그 안에서 노드를 연결해가면서 구현할 수 있다. - 대화 시스템에 필요한 대사 & 선택지 & 이벤트 시스템은 여기서 구축할 수 있다. - 대사는 물론이고, 스프라이트, 오디오 사운드, 사용자 지정 변수까지 노드 안에 추가할 수 있다. - 에셋을 다운받아보면 그 안에 예제 씬도 여러가지 있어서 배우기도 그렇게 어렵지 않다.

Memory Mapped I/O, I/O Mapped I/O

이미지
CPU가 IO장치에 접근하기 위한 대표적인 두 가지 방법 Memory Mapped I/O I/O Mapped I/O 입출력 장치에도 자신의 자원을 저장하기 위한 메모리가 필요하다는 것을 먼저 짚고 가자. 두 가지 방식은 입출력 장치의 메모리가 저장 위치에 따라 구분된다. Memory Mapped I/O의 경우 주기억 장치 에 I/O 자원을 할당한다. (메인 메모리의 일부를 입출력 장치에게 내주게 된다.) I/O Mapped I/O의 경우 입출력 장치 내부 에 I/O 자원을 할당한다. (장치 스스로 어드레스를 가지기 때문에 메인 메모리를 따로 사용하지 않는다) 여기서 나타나는 차이점을 살펴본다면  Memory Mapped I/O는 메인 메모리의 일부를 입출력 장치에게 따로 내줘야 하는 단점이 있다. 하지만 메인 메모리에 있는 만큼 cpu에서 접근하기도 간편 하다. (ARM, MIPS 등에서 활용된다) I/O Mapped I/O 는 입출력 장치에 따로 메모리를 할당하므로 메인 메모리를 따로 끌어다 쓰지 않아도 된다. 하지만 cpu에서 입출력 장치에 접근하기 위하여 Read, Write 외에도 추가적인 접근 명령어가 필요 하다. -> 프로그래밍이 어려워진다. (intel 계열 x86 프로세스에서 활용된다) <<아래는 더 자세한 내용이 소개된 페이지>> http://www.jidum.com/jidums/view.do?jidumId=467 https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5_%EC%9E%85%EC%B6%9C%EB%A0%A5

[HackerRank] New Year Chaos

문제 링크 -  https://www.hackerrank.com/challenges/new-year-chaos/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=arrays 보통 난이도의 배열 활용 문제 It's New Year's Day and everyone's in line for the Wonderland rollercoaster ride! There are a number of people queued up, and each person wears a sticker indicating their  initial  position in the queue. Initial positions increment by   from   at the front of the line to   at the back. Any person in the queue can bribe the person  directly in front  of them to swap positions. If two people swap positions, they still wear the same sticker denoting their original places in line. One person can bribe  at most two others . For example, if  and   bribes  , the queue will look like this:  . Fascinated by this chaotic queue, you decide you must know the minimum number of bribes that took place to get the queue into its ...

[프로그래머스] 숫자야구

문제 링크 -  https://programmers.co.kr/learn/courses/30/lessons/42841 완전탐색 활용. 다른 방법이 있을 것도 같은데 도저히 안 떠오르더라;;; 각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다. 그리고 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다. * 숫자는 맞지만, 위치가 틀렸을 때는 볼 * 숫자와 위치가 모두 맞을 때는 스트라이크 * 숫자와 위치가 모두 틀렸을 때는 아웃 예를 들어, 아래의 경우가 있으면 A : 123 B : 1스트라이크 1볼. A : 356 B : 1스트라이크 0볼. A : 327 B : 2스트라이크 0볼. A : 489 B : 0스트라이크 1볼. 이때 가능한 답은 324와 328 두 가지입니다. #include <string> #include <vector> #include <iostream> using namespace std; bool comp(vector<int> v, string s) { string t = to_string(v[0]); int st = 0, ba = 0; for(int i = 0;i<t.length();i++){         if(t[i] == s[i]) st++;         else if(s[(i+1)%3] == t[i] || s[(i+2)%3] == t[i]) ba++;     } if (st == v[1] && ba == v[2]) return true; return false; } bool baseballcheck(vector<vector<int>> ba, string target) { for (auto...

[프로그래머스] 라면공장

문제 링크 :  https://programmers.co.kr/learn/courses/30/lessons/42629 생각보다 까다로웠던 문제.  우선순위 큐를 왜 생각을 못했을까 문제 설명 라면 공장에서는 하루에 밀가루를 1톤씩 사용합니다. 원래 밀가루를 공급받던 공장의 고장으로 앞으로 k일 이후에야 밀가루를 공급받을 수 있기 때문에 해외 공장에서 밀가루를 수입해야 합니다. 해외 공장에서는 향후 밀가루를 공급할 수 있는 날짜와 수량을 알려주었고, 라면 공장에서는 운송비를 줄이기 위해 최소한의 횟수로 밀가루를 공급받고 싶습니다. 현재 공장에 남아있는 밀가루 수량 stock, 밀가루 공급 일정(dates)과 해당 시점에 공급 가능한 밀가루 수량(supplies), 원래 공장으로부터 공급받을 수 있는 시점 k가 주어질 때, 밀가루가 떨어지지 않고 공장을 운영하기 위해서 최소한 몇 번 해외 공장으로부터 밀가루를 공급받아야 하는지를 return 하도록 solution 함수를 완성하세요. dates[i]에는 i번째 공급 가능일이 들어있으며, supplies[i]에는 dates[i] 날짜에 공급 가능한 밀가루 수량이 들어 있습니다. #include <string> #include <vector> #include <iostream> using namespace std; int solution(int stock, vector<int> dates, vector<int> supplies, int k) { int answer = 0; int time = stock; int max = 0, maxlabel; while (time < k) { int dlabel = -1; bool flag = false; max = 0; for (int i = 0; i < dates.size(); i++) { ...

컴퓨터 시스템 구조(Computer-System Structure)

이미지
컴퓨터 시스템 구조(Computer-System Structure)  •   현대의 범용 컴퓨터 시스템은 공유 메모리에 대한 접근을 제공하는 공통 버스에 의해 연결된 여러 개의 장치 제어기와 하나의 CPU로 구성되었다. CPU와 장치 제어기는 메모리 사이클을 얻기 위해 경쟁하면서 병행 수행될 수 있다.  •   컴퓨터를 켜면  부트스트랩 프로그램 (Bootstrap program)이라는 초기화 프로그램이 실행된다. 이 프로그램을 컴퓨터의 ROM(Read-Only Memory)이나 EEPROM(Electrically Erasable Programmable Read-Only Memory)에 저장되어 있으며, 주로 펌웨어(Firmware)라고 불린다.  부트스트랩 프로그램 실행 -> 부트로더 실행(Boot loader) -> 운영체제 실행(Ram에 적재) ->운영체제가 첫번째 프로세스 실행(리눅스의 경우 Init) -> 다음 사건(event)를 기다린다 부트스트랩 프로그램에 대해 영문으로 정리된 페이지 -  https://www.tutorialspoint.com/what-is-a-bootstrap-program Interrupt Handling  • 소프트웨어는 시스템 콜(System Call) 이라 불리는 기능을 통해 인터럽트(Interrupt) 를 발생시킬 수 있다. 하드웨어 역시 시스템 버스를 통해 cpu로 신호를 보내 인터럽트를 발생시킬 수 있다.  •  현대의 운영체제는 인터럽트 드라이븐(Interrupt Driven) 방식 으로 인터럽트가 발생하면 그에 맞춰 행동을 취한다.  ISR(인터럽트 서비스 루틴 Interrupt Service Routine) 호출 저장장치 구조 및 저장 장치 계층  • 컴퓨터가 프로그램을 수행하려면 주 메모리(Random-Access ...

운영체제(Operating System : OS)란?

이미지
운영체제(Operating System : OS)란?  • 컴퓨터 시스템은 대개 네 가지 구성 요소로 나뉘어진다. 하드웨어, 운영체제, 응용 프로그램 및 사용자. 여기서 운영체제는 하드웨어와 응용 프로그램 사이의 다리 역할을 하면서 필요한 서비스를 제공 한다.  • 사용자의 관점에서 운영체제는 응용프로그램을 실행시키면서 컴퓨터 시스템을 활용하기 쉽게 만들어준다.  • 시스템 관점에서는 자원 할당자(Resource Allocator) . 컴퓨터의 자원(cpu, I/O 장치, memory 등) 을 필요한 만큼 응용프로그램에 할당시켜준다.  • 운영체제 자체의 대한 정의는 애매모호한데 제일 먼저 컴퓨터에 설치되어 있는 프로그램이라고 볼 수도 있고, 커널(Kernel) 처럼 컴퓨터가 켜진 내내 항상 돌아가는 프로그램으로 볼 수 있다.  • 운영체제의 진짜 목적은 사용자에게 편리함을 제공 하는 것 (부가적인 목적은 효율적인 컴퓨터 시스템 관리) . 운영체제를 구체적으로 정의하는 것보다는 목적을 고려하는 것이 훨씬 쉽게 와닿는다. *참조* 위키백과 :  https://ko.wikipedia.org/wiki/%EC%9A%B4%EC%98%81_%EC%B2%B4%EC%A0%9C 운영체제 공룡책을 정리해 놓은 블로그 (책 내용이 깔끔하게 요약되어 있다) :  https://parksb.github.io/article/5.html

[프로그래머스] 2018 윈터코딩 - 스킬트리

이미지
https://programmers.co.kr/learn/courses/30/lessons/49993  <- 문제 링크는 여길로 어려운 문제는 아니니 풀이도 간단하게 #include <string> #include <vector> #include <iostream> #include <string> using namespace std; bool comp(string skill, string str) { int current = 0; for (int i = 0; i < str.size(); i++) { for (int j = current; j < skill.size(); j++) { if (skill[j] != str[i]) continue; if (j != current) return false; current++; break; } } return true; } int solution(string skill, vector<string> skill_trees) {     int answer = 0; for (int i = 0; i < skill_trees.size(); i++) { if (comp(skill, skill_trees[i])) answer++; } return answer; }

알고리즘 PS 연습

보통 알고리즘 문제는 해커랭크나 프로그래머스에서 찾아서 푼다. 지금 날짜가 19년도 6월 4일이고, 지금까지 두 사이트를 합쳐서 160 문제 쯤 풀었다. 이전에 푼 문제들과 앞으로 풀 문제들은 여기 업로드 해두는 편이 좋겠지.

블로그 첫번째 포스트

테스트용 첫번째 포스트 앞으로 개인 공부 자료를 이 블로그에 게시할 생각.