for문 조건문으로 strlen으로 조건을 주었을 때 발생하는 문제에 대해 생각해보자.


환경 및 선수조건

  • C++


비교

  • strlen을 for문에 사용하였을 경우
  • 시간 복잡도 : O(n^2)
...
for(int i=0; i<strlen(s); i++){
    // Do Something
}
...


  • strlen를 for문 밖에 사용하였을 경우
  • 시간 복잡도 : O(n)
...
int len = strlen(s)
for(int i=0; i<len; i++){
    // Do Something
}
...


참고자료

  • 코드플러스 알고리즘 기초 강의

pyenv와 Anaconda를 같이 사용할 때 환경변수 순서 때문에 pyenv 환경에서도 Anaconda가 실행될 때가 있다. 이 때 해결 방법을 알아보자


환경 및 선수조건

  • pyenv, virtualenv
  • Anaconda


문제

분명히 pyenv를 통해서 virtualenv를 실행했음에도 불구하고 다음처럼 pythonAnacondapython으로 잡히는 경우가 있다.

아래와 같은 경우는 3.6.2가 나와야 하는데 Anaconda의 3.6.1버전의 python이 나오고 있는 모습

Pyenv Error


해결방법

아래처럼 ~/.bash_profile에 쉘스크립트를 작성하면됩니다.

쉡스크립트를 작성할 때 반드시 Anaconda에 대한 설정보다 아래에 pyenv관련 정보를 불러와야합니다.

bash_profile

# added by Anaconda3 4.4.0 installer
export PATH="/Users/taewoo/anaconda/bin:$PATH"

# Load pyenv automatically
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"


참고자료

“apt-get update”와 “apt-get upgrade”의 차이를 알아보자


환경 및 선수조건

  • Ubuntu


apt-get update

설치 되어있는 패키지들의 새로운 버젼이 있는지 확인할 때 해당 명령어를 사용합니다.

$ apt-get update -y


apt-get upgrade

위에 있는 apt-get update를 통해서 확인한 패키지들의 최신 버전에 따라서 패키지들의 버전을 업그레이드 해주는 명령어입니다.

$ apt-get upgrade -y


동시에 수행하는 쉘 스크립트

위에 명령어를 동시에 치기에는 번거로움이 있어서 하나의 sh파일로 묶어 보았습니다.

upgrade_packages.sh

#!/bin/bash
apt-get update -y;
apt-get upgrade -y;


파일을 생성하고 chmod +x [file name]을 통해서 실행 권한을 주어야 스크립트가 실행됩니다.

$ chmod +x upgrade_packages.sh

chown와 chmod를 하위 파일과 폴더들에 한번에 적용해보자


환경 및 선수조건

  • Ubuntu
  • chmod와 chown의 사용법


chown와 chmod를 하위 파일과 폴더들에 한번에 적용하기

둘다 공통적으로 -R 옵션을 적용해주면 됩니다.


chmod의 경우

$ chmod -R [8bit permission] [file name or folder name]

예시

// example의 하위 폴더와 파일들에 권한을 666(-rw-rw-rw-)로 변경합니다.

$ chmod -R 666 example


chown의 경우

$ chown -R [owner name]:[group name] [filename or directory]

예시

// example의 하위 폴더와 파일들에 소유자를 sam으로 그룹을 abbey로 설정합니다.

$ chown -R sam:abbey example

재귀함수 혹은 동적계획법을 통해서 조합을 계산해보자


환경 및 선수조건

  • C언어 및 gcc
  • 조합에 대한 이해
  • 재귀함수와 동적계획법에 대한 이해


조합이란

조합이란 n개의 원소에서 r개를 골라내는 방법을 의미합니다. 순열은 그 수를 뽑아서 나열하는 반면 조합은 r개만 골라내면 됩니다.

Combination


조합의 구현 방법

아래의 식을 이용해 재귀함수와 동적계획법을 통해서 구현을 합니다.

식 : nCr = (n-1)C(r-1) + (n-1)C(r)

Equation


재귀를 통한 조합의 구현

  • Time Complexity : O(r)

combination_example.cpp

#include <stdio.h>

int combination(int n, int r){

	if(n==r || r==0){
		return 1;
	}

	// nCr = (n-1)C(r-1) + (n-1)C(r)
	return combination(n-1,r-1) + combination(n-1, r);

}

int main(){

	printf("%d", combination(7,4));

}


동적계획법을 통한 조합의 구현

  • Time Complexity : O(n*r)

combination_example.cpp

#include <stdio.h>

#define MAX_SIZE 1000

int combination(int n, int r){

	int arr[1000][1000];

	// nCr = (n-1)C(r-1) + (n-1)C(r)
	for(int i=0;i<=n;i++){
		for(int j=0; j<=r;j++){

			if(i==j || j==0)
				arr[i][j] = 1;
			else
				arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
		}
	}

	return arr[n][r];

}

int main(){

	printf("%d", combination(7,4));

}