본문 바로가기

컴퓨터

Merge Sort 구현 C++를 이용하여 Merge Sort를 구현한 소스코드이다. Merge를 할 때 원래는 마지막인지 체크를 하고 값을 넣는 과정이 있어야 하지만, 이렇게 하면 코드가 복잡해지기 때문에 합치려는 배열의 사이즈를 1씩 증가시켜서 마지막에 INT형 범위의 최댓값을 넣는 방법으로 구현하였다. #include using namespace std; #define INTMAX 2147483647 void mergeSort(int[], int, int); void merge(int[], int, int, int); int main(){ int *arr, N; cin >> N; arr = new int[N]; for (int i = 0; i > arr[i]; mergeSort(arr, 0, N ..
*없이 두 정수 곱하기 모든 컴퓨터 언어에서는 곱하기 연산을 기본적으로 제공해주고 있다. 그런데 만약 '*'가 막혀 있다면 어떻게 계산을 할 수 있을까? C++에서는 정수형 데이터에 대해서 곱하기와 비슷한 연산자인 비트연산자를 제공해주고 있다. 그래서 이것을 이용하면 '*'없이 곱하기를 구현할 수 있다. (다만 매우 비효율적이다..ㅋㅋㅋㅋㅋㅋ 그냥 단순히 비트연산자를 다루는 방법을 터득한다고 생각하고 진행하자. 단순히 '*'문자가 필터링이 되어 있다면 어셈블리로 작성하는 것이 속도 상으로 더 나을수도 있겠다.) int multiply(int a, int b){ int result = 0; int tmp = 0; int sign = 0; // b의 음수여부 if(b ..
Github 소스코드 볼 때 탭 사이즈 조절 코드를 작성할 때 보통은 tab(\t)키로 인덴트를 하기 보다는 spacebar(' ')로 인덴트를 하는 경우가 많은 것 같다. 특히 JetBrains사의 IDE 환경은 기본 인덴트가 spacebar로 되어 있다. 하지만 나의 경우에는 spacebar로 되어 있으면 전부 tab키로 바꾸는 것이 익숙해졌기 때문에 IDE를 tab키로 인덴트를 할 수 있도록 변경하였다. 이렇게 indent를 구분하는 언어인 Python의 경우에는 4칸의 spacebar와 같은 크기로 공간이 되어 있어도 indentation level이 심하지 않기 때문에 크게 상관은 없지만 html과 같은 indentation level이 심한 언어에서는 4칸의 spacebar로 하게 되면 매우 코드가 읽기 어려워진다. 보통 html과 같은..
Emmet 참고자료 Emmet의 경우는 HTML 이나 CSS 소스코드를 매우 빠른 속도로 작성을 가능할 수 있도록 하는 플러그인이다.Atom 에디터의 경우에는 기본적으로 제공하고 있는 것으로 알고 있으며, Sublime Text의 경우에는 패키지를 제공하고 있다. Emmet의 큰 장점은 많이 반복되는 소스코드 부분을 몇 자를 입력하지 않더라도 한 번에 생성이 가능하다는 점이다. 예를 들어서 li 태그에 동일한 class 이름을 가지도록 해서 10개를 생성한다는 경우 li.line*10을 입력하는 것만으로 바로 생성이 가능하다.(물론 복사 붙여 넣기로도 가능하지만 더 오래걸린다...) "."의 경우에는 클래스를 나타내고, "#"의 경우에는 id를 타타내며, "{}"안에 값을 넣으면 태그의 속성을 생성할 수 있다. "*"는 반..
다른 앱 데이터 파일 복사하기 보통 안드로이드의 앱의 데이터가 저장되는 장소는 /data/data/{app package name}/에 저장이 된다. 여기서 말하는 앱의 데이터는 SQLite로 쓰여진 Database나 SharedPreference로 쓰여진 shared_pref 파일, cache 파일들을 포함하고 있다. 이러한 데이터들에 쉽게 접근을 할 수 있다면 계정 정보의 탈취가 발생할 수 있으므로 일반적인 권한으로는 파일에 직접 접근을 할 수가 없으며, 다른 앱에서의 접근 또한 막아놓는 것이 정상적이다. 여기에서 등장하는 것이 바로 Rooting이다. Rooting은 관리자 권한을 획득하는 행위로, 일반적으로는 Android에서는 Root 권한을 제공하지 않는다. Rooting을 하려고 하는 이유는 안드로이드의 시스템 파일 등에..
직접 온라인 저지를 운영해보자. 인터넷에서 검색을 하다보면 많은 온라인 저지를 볼 수 있다. 대표적으로 백준 온라인 저지(링크), 알고스팟(링크), 코딩도장(링크)와 같은 한글로 된 사이트도 있고, Project Euler(링크)와 같은 영어로 된 사이트도 존재한다.이런 온라인 저지들은 가장 많이 쓰이는 언어인 C, C++, Java등을 기본적으로 제공하며 소스코드를 업로드하면, 서버가 그 파일을 컴파일해서 서버에 저장된 무수히 많은 테스트 케이스를 실험해서 값이 일치하는지를 확인하는 방법이다. 이런 방식을 이용하면 일단 서버는 소스코드가 업로드 되었을 때 보안상의 문제가 되는 함수들은 미리 차단을 해놓아야 한다. 그렇지 않으면 관리자 권한을 탈취당할 수 있기 때문이다. 이 테스트 케이스를 이용하는 방법은 생각보다 효율적인데, 이런 방..
iframe에 내용 추가하기 iframe의 경우 되도록 사용하지 않는 것이 좋지만 다른 페이지에 해당하는 html이나 php 등을 직접 링크를 해서 바로 보여줄 수 있다는 점에서 편리하다. iframe의 경우 다른 도메인에 해당하는 파일이라면 그 안의 내용을 마음대로 바꾸거나 혹은 수정하는 것이 불가능하기 때문에, 보통 광고를 제공할 때 사용을 한다. 그러면 같은 도메인 상의 문제에서는 어떨까? php와 같은 경우에는 include 계열의 함수나 require 계열의 함수를 사용하면 같은 서버에 있는 파일을 쉽게 추가를 할 수 있다. 그러나 html의 경우에는 같은 서버에 있는 파일을 그대로 추가하기 위해서는 iframe 태그를 사용할 수밖에 없다. 그리고 같은 도메인인 경우에는 소스코드를 위험하게만 작성하지 않는다면 보안상의 문제..
한글 맞춤법 검사 사이트 한글 맞춤법을 모두 지키면서 글을 쓰기는 거의 불가능하다고 할 수 있다. 물론 유명한 맞춤법인 '되'와 '돼'의 구분과 같은 것은 가능하지만 잘 모르는 맞춤법의 경우에는 지키는 것이 어려울 수 있다. 물론 혼자서 글을 작성하고 공식적인 자리에서 글을 보여주는 것이 아니라면 맞춤법에 대해서 세세하게 신경쓰지 않아도 될 수 있다. 그러나, 자기 소개서를 작성할 때 맞춤법을 지키지 않고 글을 작성한 경우에는 그 자기 소개서를 읽는 면접관의 입장에서는 불편하게 생각하고 교양이 없는 사람이라고 생각을 할 수 있기 때문에 신경써서 맞춤법을 검사하는 것이 필요하다. 자기 소개서 뿐만 아니라 보고서의 경우에도 마찬가지이다. 그래서 이번에 소개할 사이트는 한글 맞춤법을 검사해주는 사이트이다. 이 사이트는 내가 자기소개서..