분류 전체보기

    [백준]7568번 덩치 - 완전 탐색

    n = int(input()) person = [[0] * 2 for i in range(n)] answer = [1] * n # 순위 카운트 for i in range(n): person[i][0], person[i][1] = map(int, input().split()) for i in range(n): for j in range(n): if person[i][0] < person[j][0] and person[i][1] < person[j][1]: # 자신보다 키 몸무게 클 경우에만 answer[i] += 1 # 카운트를 함 for i in range(n): print(answer[i] , end=' ') # 출력 코드 설명 몸무게와 키를 저장하기 위한 person, 순위를 매기기 위한 answer..

    [백준]2231번 분해합 - 완전 탐색

    n = int(input()) for i in range(1, n + 1): a = list(str(i)) if i + sum(map(int, a)) == n: print(i) break if i == n: print(0) 코드 설명 반복문은 1부터 n 까지 진행한다. 입력을 받을때 숫자를 분해시켜 저장하기 위해 str() 로 변환후 list() 함수를 이용한다. 만약 본래의 숫자 + 분해시켜 저장한 숫자의 합이 n 과 같다면 그 수를 출력시키고 종료한다. 마지막 반복인 i == n 이 될 경우에는 생성자가 없으므로 0을 출력한다. Point : 숫자를 분해하는 작업을 위해 list 형으로의 변환이 필요하다. 또한 1부터 반복되기에 조건을 만족하면 그것이 바로 가장 작은 생성자가 된다.

    [백준]2798번 블랙잭 - 완전 탐색

    n, m = map(int, input().split()) num = list(map(int, input().split())) length = len(num) ans = 0 # 3중 포문을 통하여 차례로 탐색 for i in range(length - 2): for j in range(i + 1, length - 1): for x in range(j + 1, length): if num[i] + num[j] + num[x] > m: # 3개를 더한 값이 크다면 넘어감 continue else: # m 보다 크지 않다면 저장된 값과 새로 더한 값중 큰것을 선택 ans = max(ans, num[i] + num[j] + num[x]) print(ans) 코드 설명 모든 경우를 탐색하는 완전 탐색의 문제이므로..

    [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 번의 반복문을 진행하..