SW개발

    [Django]Python 가상환경 만들기 / Django 설치

    가상환경을 사용하는 이유 "독립적인 작업환경에서 작업이 가능하다" 프로젝트를 진행하다보면 여러 라이브러리와 패키지를 다운받아서 사용할 경우에 의존성에 문제가 생겨 충돌이 되는 경우가 생기게 된다. 또는 특정 라이브러리는 하위 버전만 지원하는 경우가 있다. 이러한 경우에는 버전을 여러개 그리고 독립적인 작업환경을 구성할 수 있는 venv 환경을 이용함으로써 해결할 수 있다. 먼저 파이썬에는 프로젝트별로 독립된 가상 환경을 만들어주는 virtualenv 라는 툴이 있다. 이를 설치하여 가상환경을 구성할 수 있다. (가상환경을 구성하기 전에 python 설치는 선행되어야 한다.) 가상환경을 위한 virtualenv 설치 $ sudo pip install virtualenv venv 생성하기 $ virtuale..

    [백준]12865번 평범한 배낭 - DP

    n, k = map(int, input().split()) weight = [[0] * 2 for i in range(n + 1)] # 1부터 인덱스를 사용하기 위해 dp = [[0] * (k + 1) for i in range(n + 1)] # 가방의 크기 * 갯수 for i in range(1, n + 1): weight[i][0], weight[i][1] = map(int, input().split()) for i in range(1, n + 1): for j in range(1, k + 1): if j - weight[i][0] >= 0: # 가방의 크기 - 물건의 크기 >= 0 -> 즉 가방에 넘치지 않게 담을 수 있는가? # 이전의 값(i-1)과 물건을 담기전+물건의 가치 중 큰 것 선택 dp..

    [백준]1912번 연속합 - DP

    n = int(input()) num = list(map(int, input().split())) dp = [0] * n dp[0] = num[0] for i in range(1, n): dp[i] = max(dp[i - 1] + num[i], num[i]) # 직전수+현재수와 현재수를 비교해 큰것을 저장 print(max(dp)) 코드 설명 먼저 n이 1인 경우를 대비해 dp[0]에는 num[0] 값을 넣어준다. 반복문을 통해 직전수+현재수 vs 현재수 중 큰 값을 저장시키면서 반복한다. 저장된 값중 가장 큰 값을 출력하면 연속합중 가장 큰 값을 구할 수 있다. Point : 큰 값을 저장시키기 위해서 직전까지 누적된 합과 현재의 수를 비교하여 큰 것을 저장한다. 이 과정을 진행하는 이유는 직전까지의 ..

    [Linux, Unix]Bash shell 프로그래밍 문제 풀이

    1. 현재 자기자신의 pc(linux 기준)의 cpu 모델명, OS 종류 및 버전, kernel 버전을 출력하시오. #!bin/bash echo 'cpu model name' echo `cat /proc/cpuinfo | grep model*` # cpu 모델명 출력 echo 'os version' echo `cat /etc/issue` # OS 종류 및 version echo 'kernel version' echo `cat /proc/version` # kernel version 2. 매주 일요일, 새벽 4시 30분과 낮 12시 30분에, 현재디렉토리에 test.txt 파일을 생성하는 crontab을 작성하시오. #!bin/bash echo 'crontable (touch) register' echo ..

    [Linux, Unix]명령어 응용 및 문제풀이2

    1.소유자가 george이고 그룹이 others일때 data파일의 소유자와 그룹을 하위디렉토리까지 동시에 변경하시오. chown -r geroge:others data 2.현재 로그인한 사용자의 목록에서 2016-­01-­07에 접속한 사용자를 출력하시오. who | grep '2016-01-07' 3.접근권한이 755인 data 디렉토리를 생성하시오 (명령어 1개 이용). mkdir -m 755 data 4.현재 디렉토리에서 링크파일만 찾는 lnfind란 alias를 생성하시오. alias lnfind='find ./ -type l' 5.현재 디렉토리에서 24시간 내에 수정된 파일을 찾으시오. find ./ -mtime -1 6.현재 디렉토리에서 test로 시작하는 디렉토리만 찾아 삭제하시오. find..

    [백준]9251번 LCS - DP

    string1 = "0" + input() string2 = "0" + input() dp = [[0] * len(string1) for i in range(len(string2))] for i in range(1, len(string2)): # 두번째 문자열을 한 개씩 반복하기 위해 for j in range(1, len(string1)): if string2[i] == string1[j]: # 만약 같은 문자인 경우 dp[i][j] = dp[i - 1][j - 1] + 1 # BG G -> BGC GC 가 된 경우 "C" 라는 값이 동일하게 들어온 것. # 따라서 대각선 왼쪽의 기억되어있는 값 + 1 else: # 다른 문자인 경우 dp[i][j] = max(dp[i - 1][j], dp[i][j -..

    [백준]2565번 전깃줄 - DP

    n = int(input()) line = [[0] * 2 for i in range(n)] for i in range(n): line[i][0], line[i][1] = map(int, input().split()) line.sort(key=lambda x: x[0]) length = [0] * n for i in range(n): length[i] = 1 for j in range(i): if line[j][1] < line[i][1]: length[i] = max(length[i], length[j] + 1) print(n-max(length)) 코드 설명 먼저 전깃줄의 이어진 정보를 line 이차원 리스트에 저장한다. 그 후 한쪽의 전봇대를 기준으로 번호를 정렬하여 준다. n 번의 반복문을 진행하..

    [Linux, Unix]명령어 응용 및 문제풀이

    1. 수정된지 100일이 지난 파일 목록을 출력하시오. (명령어 : find) find ./ -type f -mtime +100 2. 시간순으로 정렬하기 위한 명령어를 적으시오. (명령어: ll) ll -tr 3. 명령어가 저장되는 history 파일의 경로는 어디인가? ~/.bash_history 4. 저장된 히스토리를 파일명 ‘myhistory.log’ 으로 저장하시오 history -w myhistory.log 5. temp 디렉터리의 소유자/그룹을 하위 디렉토리, 파일까지 전부 nobody 로 변경하시오. (명령어:chown) chown -R nobody:nobody temp 6. temp 디렉토리의 파일 중, 하루가 지난 파일을 삭제하시오 (명령어: find) find temp -ctime +0..

    [백준]11054번 가장 긴 바이토닉 부분 수열 - DP

    n = int(input()) num = list(map(int, input().split())) dp1 = [0] * n dp2 = [0] * n for i in range(n): dp1[i] = 1 for j in range(i): if num[j] < num[i]: dp1[i] = max(dp1[i], dp1[j] + 1) num.reverse() for i in range(n): dp2[i] = 1 for j in range(i): if num[j] < num[i]: dp2[i] = max(dp2[i], dp2[j] + 1) dp2.reverse() ans = [0] * n for i in range(n): ans[i] = dp1[i] + dp2[i] - 1 print(max(ans)) 코드 설명..

    [백준]11053번 가장 긴 증가하는 부분 수열 - DP

    n = int(input()) num = list(map(int, input().split())) length = [0] * n for i in range(n): length[i] = 1 for j in range(i): if num[j] < num[i]: length[i] = max(length[i], length[j] + 1) print(max(length)) 코드 설명 LIS 알고리즘을 구현하는 문제이다. 부분 수열의 길이를 저장하는 length 리스트를 [0] * n 의 길이만큼 초기화 한다. 반복문 안에서 기본길이는 1로 만들어 준다. i 번째 전에 존재하는 값들 중에 i 번째의 값보다 큰 수가 존재할 경우에는 현재 i 번째의 수열 길이와 j + 1 의 수열 길이중 큰 값으로 업데이트한다. le..