Programming(201)
-
2-2. 순열
순열 1~N까지 이루어진 순열로, 크기는 항상 N이며 겹치는 숫자가 존재하지 않는다. 크기가 N인 순열은 총 N!개가 존재한다. 순열을 사전순으로 나열했을 때, 다음에 오는 순열과 이전에 오는 순열을 찾을 수 있다. N이 3인 경우 사전순으로 나열한 수열은 다음과 같다. 아래의 표에서 1번째 순열은 오름차순으로 정렬된 순열이 되며, 마지막 순열(6번째 순열)은 내림차순으로 정렬된 순열임을 알 수 있다. 순서 수열 1번째 순열 123 2번째 순열 132 3번째 순열 213 4번째 순열 231 5번째 순열 312 6번째 순열 321 다음 순열 10972 다음 순열, 백준 온라인 저지 위에서 정리한 내용을 토대로 다음에 오는 순열을 찾을 수 있다. A\[i-1\] < A\[i\]를 만족하는 가장 큰 i를 찾는..
2019.05.12 -
2-1. 브루트 포스(주먹구구식), N중 for문
Brute Force 브루트 포스는 모든 경우의 수를 계산해보는 방법이다. 단, 경우의 수를 계산하는 데 걸리는 시간이 주어진 문제의 시간 제한을 넘지 않아야 한다. Brute Force 방식으로 문제를 풀 때 가능한 경우의 수를 모두 계산해본다. 직접 계산을 통해서 구하며, 대부분 손으로 계산해볼 수 있다. 모든 방법을 찾는다. 대표적으로는 직접 계산하는 방법, 반복문 사용, 순열 사용, 재귀 호출, 비트마스크를 사용하여 직접 계산하는 방법이 있다. 각각의 방법을 이용해 답을 구해본다. 그리고 시간 제한을 초과하지 않는 방법을 찾는다. Brute Force 문제의 시간복잡도는 보통 O(경우의 수*방법 1개를 시도해보는데 걸리는 시간 복잡도)가 된다. 일곱 난쟁이 일곱 난쟁이, 백준 온라인 저지 아홉명의..
2019.05.07 -
[AngularJS 1.x] ng-options의 내용을 변경할 때 값이 초기화되는 경우
2019/03/12 - [Programming/AngularJS] - [angularJS] ng-change/ng-click 내에서 ng-model로 바인딩 된 값을 변경할 시, UI에 변경된 값이 표시되지 않는 경우 이 글과 비슷한 내용이다. ng-change/ng-click 내에서 ng-model로 바인딩 된 값을 변경할 때의 문제이다. ng-options를 활용하여 select를 작성하는 경우, ng-options내에 선언한 배열이나 객체를 변경하면 값이 초기화된다. 이전에 언급했던 글과 비슷한 현상인데, 렌더링을 다시 하기 때문에 ng-options내의 가장 처음 값이 선택되어버리는 문제이다. 하지만 ng-model값은 변경되지 않으므로, ng-change가 발생하지도 않는다. UI를 클릭해서 이..
2019.05.07 -
1. 수학 / 최대공약수, 최소공배수, 소수
나머지(모듈러) 연산 나머지 연산이 중요한 이유는 C의 int, Java의 long long처럼 최대 크기가 제한되어있는 자료형이 주어졌을 때, 결과값이 너무 클 경우 해당 자료형에 들어가지 못하기 때문이다. 이럴 경우에 나머지 연산을 이용하여 몫을 구하라는 내용이 문제에 포함되게 된다. 아래의 규칙을 잘 알아두자. (A+B)%M = ((A%M)+(B+M))%M (AxB)%M = ((A%M)x(B+M))%M 위의 규칙은 나누기일 경우에는 성립하지 않는다. (A-B)%M = ((A%M)-(B%M)+M)%M 뺄셈의 경우에는 먼저 모듈러 연산을 한 결과가 음수일 수 있기 때문에, 위와같이 계산해야한다. 최대공약수(GCD) 일반적으로 최대공약수가 필요한 경우는 정답이 분수일 때, 기약분수의 형태로 나타낼 때이다..
2019.05.06 -
GCM to FCM Migration 정리
이전 글 보기 [GCM to FCM Migration #1] 기존에 사용하던 GCM 코드 확인 [GCM to FCM Migration #2] Migration 시작 [GCM to FCM Migration #3] Legacy 코드를 제거하자! GCM to FCM을 검색해보면 보다 많고 자세한 자료를 찾을 수 있다. 하지만 이 글을 작성하기 시작한 이유는 GCM에 대해 전혀 모르는 상태에서, FCM으로 Migration해야하는 상황에 빠졌기 때문에 정리가 필요하다고 판단했기 때문이다. Migration이 끝나가는 지금 생각해보면 필요한 내용은 Migrate a GCM Client App for Android to Firebase Cloud Messaging에 다 있다. 다만 나에게 필요한 내용이 누락되어있었..
2019.04.29 -
[C/gLib] trim과 문자열을 찾는 함수 작성하기
문자열을 특정 토큰단위로 끊거나 할 때는, 공백이 있을 경우를 대비해서 trim이 필요하다. 물론 gLib을 사용한다면 토큰 단위로 끊은 다음에, g_strstrip을 이용해서 앞/뒤의 공백만 잘라주는 편이 더 효율적인 경우가 많다. 처음에는 공백만 제거하는 함수를 만들었다가, 이후에는 특정 문자열을 제거하는 함수로 수정했다. 작성한 함수는 아래와 같다. gchar* trim(char* target_string, char symbol) { if(target_string == NULL) {return -1;} gchar before_string[256]; gchar after_string[256]; gint index_before=0; gint index_after=0; gint len_target_str..
2019.04.26