파이썬 기초 - 1 -
·
Python
지도에서 직선 거리구하기자 강남역 9번 출구에서 CU로 가려고 합니다. 여기서 우리는 9번 출구에서 CU까지 직선 거리가 얼마인지 궁금할 때가 있을겁니다.네이버 지도에서는 그냥 대각선으로 쭉 그어서 거리 구할 수 있기는 하지만 우리는 파이썬으로 이걸 구해봅시다   우선 우리에게 주어진 정보는 두가지라고 가정하겠습니다.삼각형의 밑변 삼각형의 높이가 주어졌습니다.피타고라스 정리를 활용하면 이 문제를 풀 수 있습니다. 우리는 a와 b의 길이를 알면 c를 알수 있다! 라는 지식을 가지고 있습니다.왜 그렇냐구요?  a의 길이를 한변으로 하는 정사각형의 넓이와, b의 길이를 한 변으로 하는 정사각형의 넓이를 구해보니 c를 한변으로 하는 정사각형의 넓이와 같더라! 라는걸 옛날에 수학자들이 밝혀냈습니다. 정사각형의 넓..
Rust 기본개념 - 패키지, 모듈관리
·
Rust
거대한 프로그램의 코드를 작성 할 때는 코드의 구조화가 중요해집니다. 코드에서 연관된 기능을 묶고 서로 다른 기능을 분리해두면 이후 특정 기능을 구현하는 코드를 찾거나 변경할 때 헤매지 않습니다. 한 패키지에는 여러 개의 바이너리 크레이트와 라이브러리 크레이트가 포함될 수 있으므로, 커진 프로젝트의 각 부분을 크레이트로 나눠서 외부 라이브러리 처럼 쓸 수 있습니다. 패키지와 크레이트크레이트크레이트는 러스트가 컴파일 한 차례에 고려하는 가장 작은 코드 단위 입니다. 크레이트는 바이너리일 수도 있고 라이브러리일 수도 있습니다. 바이너리 크레이트는 main 함수를 포함하고 실행파일이 실행되면 무슨일이 일어나야 하는지 정의한 파일입니다. 반대로 라이브러리 크레이트는 main함수를 가지지 않고 실행파일 형태로 컴..
Rust 기본개념 - 패턴매칭 match
·
Rust
Match란?Rust에서 패턴 매칭 분기를 위한 흐름제어 도구 입니다.기본 문법match 값 { 패턴 => 표현식, 패턴 => 표현식, // ...}값: 매칭하려는 값입니다.패턴: 값과 비교할 패턴입니다.표현식: 패턴이 일치했을 때 실행할 코드입니다. Match의 사용법숫자 매칭fn main() { let number = 3; match number { 1 => println!("Number is one"), 2 => println!("Number is two"), 3 => println!("Number is three"), _ => println!("Number is something else"), }}패턴: 1, 2, ..
Rust 기본개념 - 열거형의 활용
·
Rust
아래 코드는 랜덤으로 날씨를 선택하고 패턴 매칭으로 해당하는 문자열을 출력하는 코드 입니다.use rand::Rng;fn main () { enum Weather { Sunny, Ranny, Snowy {cm:u32} } let weather_list = vec![Weather::Sunny, Weather::Ranny, Weather::Snowy { cm: 5 }]; let random_number = rand::thread_rng().gen_range(0..3); match &weather_list[random_number] { Weather::Ranny => println!("Ranny!"), Weathe..
Rust 기본개념 - 열거형
·
Rust
열거형 정의하기구조체가 서로 연관된 필드 및 데이터를 묶는 방법을 제공 했다면 열거형은 어떤 값이 여러개의 간으한 값의 집합 중 하나라는 것을 나타내는 방법을 제공 합니다. 예를들어 Rectangle이 Circle과 Triangle을 포함하는 다양한 모양들의 집합 중 하나라고 표현하고 싶을 수 있습니다. 이때 열거형을 사용하여 나타낼 수 있습니다. 값의 제한과 가독성,안전성을 위해 열거형을 사용합니다.IP 주소를 열거형으로 나타내면 아래와 같이 나타낼 수 있습니다.enum IpAddrKind { V4, V6,} IP 주소라는 것은 IPv4, IPv6 두 종류 입니다. 이 처럼 정해진 값만 사용하도록 값을 제한할 수 있습니다. 열거형의 활용아래처럼 IpAddrKind의 두 개의 값에 대한 인스턴..
Rust 기본개념 - 메서드
·
Rust
메서드란? 함수와 유사한 개념으로 fn 키워드와 함수명으로 선언하고 매개변수화 반환값을 가집니다. 메서드 문법메서드는 다른 어딘가로부터 호출될 때 실행됩니다. 하지만 메서드는 함수와 달리 구조체 컨텍스트에 정의되고, 첫번째 매개변수는 메서드를 호출하고 있는 구조체 인스턴스를 나타냅니다. 메서드 정의하기우선 함수를 구조체에 정의된 메서드로 변환해봅시다.Rect 컨텍스트에 함수를 정의하기 위해서 impl 블록을 만듭니다.// 명시적 동의#[derive(Debug)]struct Rect { width: u32, height: u32}impl Rect { fn area(&self) -> u32 { self.width * self.height }}fn main() { let..
Rust 기본 개념 - 구조체
·
Rust
구조체는 타입이 다른 여러 값을 하나로 묶는 방법 입니다. 구조체는 설명만 보면 튜플과 상당히 비슷해 보입니다. 실제로도 튜플처럼 구조체의 구성요소들을 각각 다른 타입이 될 수 있습니다.그리고 구조체는 각각의 구성 요소에 이름을 붙일 수 있습니다. 객체지향 언어를 해보았던 사람이라면 바로 객체가 떠오를겁니다.아래를 보면 우리가 생각한 객체의 모습과 상당히 비슷합니다. 자바에서는 아마 이런 구조를 객체 또는 클래스 라고 불렀던 것 같습니다.타입스크립트 에서는 타입 혹은 인터페이스가 구조체와 비슷하다고 볼 수 있겠네요!struct User { active: bool, username: String, email: String, sign_in_count: u64,}정의한 구조체는 해당 구조..
Rust 기본개념 - 슬라이스
·
Rust
슬라이스는 컬렉션을 통째로 참조하는 것이 아닌 연속된 일련의 요소를 참조하도록 해줍니다.슬라이스는 참조자의 일종으로 소유권을 갖지 않습니다. fn first_word(s: &String) -> usize { let bytes = s.as_bytes(); for (i, &item) in bytes.iter().enumerate() { if item == b' ' { return i; } } s.len()} 위 예제는 함수의 인자로 받은 문자열에서 첫번째 공백문자를 찾아 리턴하는 예제 입니다.우선 슬라이스 개념 없이 이를 수행해보도록 하겠습니다. let bytes = s.as_bytes();// 공백 여부 체크를 위해 바이트로 변환 Rust의..
Atan2
·
Unity
Atan( 아크탄젠트 )유니티에서 오브젝트를 회전 시킬 때 아크탄젠트라는 개념이 필요합니다.탄젠트의 역함수이며 좌표평면에서 x,y값으로 각도를 구하기 위해 사용합니다. angle = Mathf.Atan2(vertical, horizontal) * Mathf.Rad2Deg; // 순서 변경transform.rotation = Quaternion.Euler(0, angle, 0); 인자로 넣은 vertical과 horizontal은 유저가 입력한 방향에 관한 정보 입니다.인자는 y,x순으로 넣으면 됩니다. vertical 값이 0.7이고, horizontal 값이 0.8이라면0.7/0.8이 됩니다이를 계산 해보면 약 0.875라디안 이라는 값이 나오는데 이를 "도"로 변환하면 39.8도가 됩니다.좌표평면에서..
삼각함수
·
Unity
삼각 함수란?삼각형의 각도와 변의 길이의 관계를 나타낸 것.삼각함수에는 Sin(사인), Cos(코사인), Tan(탄젠트)가 있다. Sin직각삼각형의 각도와 대변의 길이가 주어졌을 때 빗변과의 비율을 구하는 함수이다. 각도가 60도이고 대변의 길이가 10이라고 했을 때 빗변의 길이는 약 11.55가 된다.Sin(60)은 약 0.866025404이고 대변의 길이가 10이므로 비율을 적용해보면 빗변의 길이는 11.55가 된다Cos직각삼각형의 각도와 인접한 변의 길이가 주어졌을 때 빗변과의 비율을 구하는 함수이다. 각도가 60도이고 인접변의 길이가 10이라고 했을 때 빗변의 길이는 20이다.Cos(60)은 0.5이고 인접변의 길이가 10이므로 비율을 적용해보면 빗변의 길이는 20이 된다 Tan직각삼각형에서 각도..
Unity 기초
·
Unity
유니티는 에디터에서 주로 C#을 사용함.엔진에서 기본으로 제공하는 기능 이외에 필요한 것들은 C#을 사용해 스크립트라고 부르는 파일을 만들어 구현함. 게임 오브젝트캐릭터, 배경, 텍스트, 및, 조명 등 게임을 구성하는 요소. 오브젝트는 여러 컴포넌트의 집합체이고 이것들이 모여 하나의 Scene을 구성함. 프리팹프리팹은 게임 오브젝트를 재사용 가능한 형태로 미리 만들어 두는 것을 의미함. 이는 웹 개발 혹은 다른 개발에서 공용 컴포넌트와 유사하게 해석됨. 프리팹을 만들고 해당 프리팹을 기반으로 여러 오브젝트를 생성하면 프리팹만 변경했을 때 모든 오브젝트가 해당 프리팹의 변경 사항을 반영함. 예를들어 웹개발에서 기본 차트를 구현해두고 해당 차트에 들어갈 데이터만 인자로 받아서 넣는 그런 형태와 유사하다고 이..
Heap
·
자료구조
이진트리 형태의 자료 구조입니다. 최대값 혹은 최소값을 빠르게 찾기 위해 주로 사용합니다.이 글에서는 최대힙을 기준으로 설명합니다. 코드가 깔끔하지 않을 수 있음 주의  힙 자료구조는 두가지 형태가 있습니다.  최대힙은 아래 그림 처럼 부모 노드가 반드시 자식 노드 보다 커야합니다. 최소힙은 아래 그림과는 정 반대로 부모 노드가 반드시 자식 노드보다 작아야 합니다. 최대힙과 최소힙은 사용하는 사람이 필요에 따라 선택하면 됩니다. 기본적인 원리는 최대/최소 모두 같습니다.    특징 / 삽입 / 삭제Heap도 데이터를 저장하기 위한 자료구조 이기 때문에 삽입과 삭제가 필요합니다. 이제부터 해당 글은 최대힙을 기준으로 설명합니다. 특징Heap 자료구조는 주로 배열 혹은 리스트로 이를 표현합니다. JAVA 에..