/* 본 포스팅은 최호성 저자의 '독하게 시작하는 C프로그래밍' 교재를 참조로 작성되었음을 먼저 알려드립니다. */ 변수의 본질은 메모리이고, 상수의 본질은 메모리에 저장되는 정보 그 자체를 의미한다. 변수와 상수는 기본적으로 수(자료)이므로 모두 자료형 개념이 적용된다. # 형 한정어 const 형한정어 const는 변수를 '상수화'하는 역할을 한다. 변수를 변하지 않는 숫자로 만드는 것이다. 변수의 본질이 메모리임을 생각할 때 쉽게 생각하면 어떤 메모리를 '읽기 전용'메모리로 만들어주는 기능을 제공하는 것이다. 형한정어 const는 중요한 정보가 들어 있는 메모리를 보호하기 위한 것으로도 생각할 수 있다. 그러나 const 예약어는 변수를 선언할 때 사용한다. 즉, 처음에는 쓰기 가능한 변수였다가 몇..
/* 본 게시물은 '핵심만 골라 배우는 안드로이드 스튜디오 & 프로그래밍(Android Studio 2 Development Essentials) | 닐 스미스 지음' 의 내용을 토대로 작성되었습니다. */ # 안드로이드 액티비티 자바, C++, C# 과 같은 객체지향 프로그래밍 언어에 익숙한 사람들은 애플리케이션의 기능을 캡슐화하여 클래스를 만들고, 이것을 객체로 생성하여 애플리케이션을 구성하는 개념을 잘 알고 있을 것이다. 안드로이드 애플리케이션은 자바로 작성되므로 객체지향 프로그래밍을 해야 한다. 그러나 안드로이드는 재사용 가능한 컴포넌트의 개념을 더 높은 수준으로 끌어올렸는데, 그것이 바로 '액티비티(Activity)'다. 안드로이드 애플리케이션은 액티비티라는 컴포넌트가 항나 이상 결합되어 생성된..
/* 본 게시물은 '핵심만 골라 배우는 안드로이드 스튜디오 & 프로그래밍(Android Studio 2 Development Essentials) | 닐 스미스 지음' 의 내용을 토대로 작성되었습니다. */ # 안드로이드 소프트웨어 스택 안드로이드 시스템은 소프트웨어 스택(stack)의 형태로 구성된다. 마치 레고(Lego) 블록을 조립해 층층히 쌓아놓듯이 애플리케이션, 운영체제, 런타임 환경, 미들웨어, 각종 서비스와 라이브러리 등이 겹겹이 모여 구성된 것이라고 볼 수 있다. 이 아키텍처는 아래의 그림과 같이 시각적으로 표현할 수 있다. 스택의 각 계층과 요소는 긴밀하게 통합되어 있다. 그리고 모바일 장치를 위한 최적의 애플리케이션 개발과 실행 환경을 제공하기 위해 신중하게 조율되어 있다. # 리눅스 ..
# 해싱이란? 대부분의 탐색 방법들은 탐색 키를 저장된 키 값과 반복적으로 비교하면서 탐색을 원하는 항목에 접근한다. 반면 해싱은 키 값에 직접 산술적인 연산을 적용하여 항목이 저장되어 있는 테이블의 주소를 계산하여 항목에 접근한다. 이렇게 키 값의 연산에 의해 직접 접근이 가능한 구조를 해시 테이블(hash table)이라 부르고, 해시 테이블을 이용한 탐색을 해싱(hashing)이라 한다. 키들의 비교에 의한 탐색 방법은 정렬이 안 되어 있다면 $O(n)$이고 정렬이 되어 있다면 $O(log_2n)$이다. 정렬되어 있는 경우의 시간 복잡도가 $O(log_2n)$인 건 이진 탐색 알고리즘 혹은 이진 탐색 트리의 탐색 알고리즘의 시간복잡도를 생각하면 된다. 잘 모르겠다면 이진 탐색 또는 이진 탐색 트리 ..
# random walk 술취한 바퀴벌레 문제 // 문제가 길다. 집중해서 살펴보자. 수학 분야에서 "random walk"로 불리워지며 오랫동안 관심의 대상이 되었던 많은 문제들이 있다. 이러한 문제 중 지극히 간단한 것조차도 해결하기 매우 어렵기 때문에 대부분의 문제들이 해결되지 못한 채 남아 있다. 그 하나의 예가 '술취한 바퀴벌레 문제'다. 한 (술취한) 바퀴벌레가 $m$$\times$$n$ 크기의 직사각형 방 중간의 한 타일 위에 있다. 바퀴벌레는 임의로 타일에서 타일로 이동한다. 바퀴벌레가 현재 타일에서 그 주위 8개의 타일(벽 옆에 있지 않은 경우에 한해)로 같은 확률을 가지고 움직인다고 가정하자. 이 때 적어도 한 번씩 방의 모든 타일을 지나가는 데 걸리는 시간은 얼마인가? 순수한 확률 이..
# 정방 밴드 행렬 문제 문제) 정방 밴드 행렬(square band matrix) $D_{n,a}$ 란 0이 아닌 모든 항들이 주대각선을 중심으로 한 밴드에 있는 $n$$\times$$n$ 행렬이다. 밴드는 아래의 그림과 같이 주대각선과 주대각선의 위와 아래에 $a-1$ 개의 대각선을 포함한다. $D_{n,a}$의 밴드 안에 있는 원소의 개수를 구하는 식을 작성해보아라. 또한 $D_{n,a}$의 밴드 안에 있는 원소 $d_{i,j}$에서 i와 j는 어떤 관계인지도 서술해라. # 풀이 이 문제 또한 손으로 직접 써 보다 보면 규칙성이 보이는 문제고, 그 규칙성을 식으로 정리하면 된다. 주대각선의 특징부터 살펴 보면, 행렬의 크기가 $n$이라고 했을 때, $n$개의 원소를 갖는다. 주대각선을 제외하고, 그..
# 3원 대각 행렬 문제 문제) 3원 대각 행렬(tridiagonal matrix)은 아래와 같이 정방 행렬(square matrix)에서 주대각선(major diagonal)과 이 주대각선의 바로 위 아래의 대각선에 있는 원소를 제외한 다른 모든 원소가 0인 행렬이다. 이 세 개의 대각선 위에 있는 원소들이 배열 $b$에, $a[ 0 ][ 0 ]$은 $b[ 0 ]$에 저장된다. 배열 $b$에서 a[ i ][ j ] $(0$$\leq$i, $j
# 삼각행렬의 원소의 주소를 구하는 문제 문제) 정방행렬의 대각선 위나 아래의 모든 원소들이 0일 때 그 행렬을 삼각행렬(triangular matrix)이라 한다. 아래의 그림은 하삼각행렬(lower triangular matrix)과 상삼각행렬(upper triangular matrix)을 나타낸다. $n$개의 행을 가진 하삼각행렬에서 0이 아닌 $i$행의 원소는 최대 $i + 1$개 이다. 따라서 0이 아닌 항의 총계는 다음과 같다. // $i$는 0부터 시작한다. 하삼각행렬의 0번째 행의 원소의 개수는 1개이고, 그 아래의 행을 따라가면서 원소의 개수를 세면 도출 가능한 규칙이다. $d =$$\sum_{i=0}^{n-1} {i+1}$$=$$\frac{n(n+1)} {2}$ // $d$는 dista..
# 행렬의 안장점의 존재 여부와 그 위치, 값을 구하는 문제 문제) $m*n$ 행렬에서 어떤 원소 $a[i][j]$가 $i$행에서 가장 작은 값이고 $j$열에서 가장 큰 값일 때, 이 행렬은 안장점(saddle point)을 갖는다고 말한다. 안장점이 존재한다고 할 때 이 안장점의 위치를 결정하는 C함수를 작성하라. 작성한 함수의 연산 시간은 얼마인가? # 풀이 문제에서는 행렬의 안장점(saddle point)이 존재한다고 가정했지만, 직접 프로그래밍을 할 때는 예외상황에 대한 처리 또한 해주는 것이 좋다. 안장점(saddle point)이 있다면 어디 위치의 무슨 값이고, 만약 없다면 존재하지 않는다고 출력할 수 있는 프로그램을 작성해보자. 안장점(saddle point)은 행에서 가장 작고, 열에서 ..
# 배열 뒤집기 문제 문제) 주어진 배열 $a[n]$을 가지고 $z[0] = a[n-1]$, $z[1] = a[n-2]$, $...$, $z[n-2] = a[1]$, $z[n-1] = a[0]$의 성질을 만족하는 배열 $z[n]$을 작성하라. 이 때, 최소의 기억장소를 사용하여 만들어라. # 풀이 비교적 간단한 문제에 속한다. 임의의 원소를 만들어 준 후에, 반복문을 이용하여 인덱스에 약간의 연산만 추가해 주어 값을 복사한다. /************************************************* ** 배열의 원소를 거꾸로 갖는 새로운 배열 제작 *************************************************/ #include #define MAX_SIZE 3..
- Total
- Today
- Yesterday