728x90

Programming Language 33

[백준] 1937 욕심쟁이 판다 파이썬 후기

링크 : https://www.acmicpc.net/problem/1937 DP와 DFS를 적절히 섞어서 푸는 문제이다. 오래 매달리다가 해답을 검색해보고 풀었다. 푸는 방법 1. dfs에서 첫 방문하는 지점을 1로 초기화한다. 2. 주변 4방향에 더 큰 값이 있는지 비교해보고, 있으면 현재값과 비교해 더 큰 값을 취한 뒤, 더 방문할 곳이 없으면 반환한다. 3. 모든 지점에 대해 1,2를 반복한다. 오래 걸렸던 이유 1. 고정관념 백준에서 다이나믹 프로그래밍 카테고리에 있어 DP만으로 풀어보려고 했는데, DP만으로 불가능하단 생각이 들고나서야 DFS를 생각하고 접근해보았다. 이 생각이 들기까지 시간이 오래 걸린 것도 나의 공부가 모자란 것도 컸다. 다음부턴 문제를 꼭 DP라고만 생각하지 않고 어떻게 풀..

파이썬에서 쉘 스크립트 사용하기

파이썬에서 쉘 스크립트의 결과를 받아보는 경우가 필요해서 공부한 결과를 쓴다. 파이썬에서 OS 명령어를 사용하는 방법은 크게 2가지가 있다. 1. os 라이브러리 이용하기 2. subprocess 라이브러리 이용하기 검색해본 결과 두 개의 차이점은 os는 순차적으로 실행해서 해당 명령어가 끝날 때까지 기다린다는 점, subprocess는 새로운 프로세스로 생성해서 실행한다는 점이다. 순차적으로 실행한다면 os가 좋겠지만 나는 subprocess로 진행하기로 했다. subprocess는 다양한 메소드로 call, run, check_output 등이 존재하지만 나는 파이썬에서 쉘 스크립트의 결과를 받아보는 게 필요했기 때문에 check_output으로 진행하였다. (꼭 check_output이 아니여도 됨..

애플워치로 HRV 데이터 추출하기

HRV란 Heart Rate Variability의 약자로, 심박변이도라고 말하기도 한다. 쉽게 생각하면 심장은 항상 안정적으로 뛰기 때문에 변이가 적을수록 건강한 것이 아닌가 싶겠지만, 심장은 오히려 상황에 따라 변화하면서 불규칙하게 뛰기 때문에 건강할 사람일 수록 HRV가 더 높다고 한다. 검색해보던 중에 애플워치를 착용하고 있던 나에게 애플워치로도 HRV를 추출할 수 있다고 해서 검색해보고 시도해봤다. 1. 애플워치 데이터 추출하기 애플워치 공식홈페이지에 따라 행동하면 건강 데이터를 추출해낼 수 있다. https://support.apple.com/ko-kr/guide/iphone/iph27f6325b2/ios 애플워치에서 얻을 수 있는 생체 정보는 다음과 같다. 분당 심장박동수 휴식 시 심장박동수..

[python] joblib.load() 에러

sklearn.joblib 라이브러리가 아닌 pypi의 joblib 라이브러리에서 발생하는 문제 로컬 환경에서는 sklearn의 모델들을 joblib.dump() 명령어를 이용해 저장했었는데 EC2 인스턴스에서 실행하기 위해 설치한 sklearn 버전이 0.24여서 해결이 되지 않았었다. 해결방법 scikit-learn 라이브러리 버전을 변경하면 된다. pip install scikit-learn=0.22.1 pip install scikit-learn=0.19.1 출처 kangjik94.tistory.com/m/47 stackoverflow.com/questions/65758102/no-module-name-sklearn-forest-ensemble

[DP] Knapsack Problem

최근에 백준에서 다이나믹 프로그래밍(DP)를 공부하다가 처음 보는 유형의 문제가 있어 글을 쓰게 되었습니다. [ 관련 문제 : 백준 12865 평범한 배낭 www.acmicpc.net/problem/12865 ] Knapsack 문제란? 어떤 도둑이 보석상에 들어가 보석을 훔친다고 했을 때, 배낭의 용량을 넘치지 않게 담아야 하고, ( 넘치면 훔칠 수 없다는 가정 ) 돈을 가장 많이 벌 수 있도록 담는 방법에 대해 얘기하는 것을 Knapsack 문제라고 합니다. Knapsack 문제의 경우는 담는 물건이 나눌 수 있는 경우, 단순하게 담을 수 있냐 없냐 (0-1) 두 가지의 종류가 있지만 지금은 단순하게 담는 0-1 Knapsack 문제에 대해 쓰겠습니다. 이게 DP랑 무슨 상관?? 단순하게 생각해보면 ..

[백준] 11057 오르막 수 파이썬

문제링크 : www.acmicpc.net/problem/11057 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수 www.acmicpc.net 문제 설명 푸는 방법 자세히 보면 수는 0으로 시작할 수 있다는 말이 있는데, 이는 01 02 03 04 05 도 가능하다는 말이 됩니다. 엥?? 그럼 1로 시작하는 건 당연히, 12 ~ 19까지, 2로 시작하는건 22~ 29 까지 8로 시작하는건 89까지 입니다. 그럼 [i][n]에 해당하는 값은 i-1에서 n~9까지의 값을 더하면 됩니다. 이전에 계단수 문제를..

[백준] 19947 투자의 귀재 배주형 파이썬

문제 링크 www.acmicpc.net/problem/19947 푸는 방법 DP를 이용해 해당 년도에 얻을 수 있는 최대값을 구하면 됩니다. 점화식은 다음과 같습니다. dp[i] = max(dp[i-1]*1.05, dp[i-3]*1.2, dp[i-5]*1.35) 만약 10000원과 6년이 주어졌다고 하면, 1년 뒤에 얻을 수 있는 최대 금액은 dp[1] = dp[0] *1.05 = 10,000 * 1.05=10,500, 2년 뒤에 얻을 수 있는 금액은 dp[2] = dp[1] * 1.05 = 10,500 *1.05=11,025, 3년 뒤에 얻을 수 있는 금액은 dp[3] = max(dp[2] * 1.05 , dp[0] * 1.2) = max(11,025 * 1.05, 10000*1.2) = max (11..

[백준] 1932 정수 삼각형 파이썬

푸는 방법 DP(Dynamic Programming)을 이용하여 행이 증가될 때마다, 최고의 값을 구합니다. 행을 거듭해가며 더할 때마다 삼각형을 해체해서 경우를 살펴보면 다음과 같습니다. 1. 왼쪽으로만 진행하는 경우 3. 오른쪽으로 증가하는 경우 에는 단순하게 이전행의 마지막값을 더해주면 됩니다. 하지만 2번 같이 값이 겹쳐지는 경우에는 각각 더했을 때 최대가 되는 경우를 비교해 선택하면 됩니다. 코드 n = int(input()) tri = [] for _ in range(n): tri.append(list(map(int, input().split()))) for i in range(1, n): for j in range(i+1): if j==0: #왼쪽 행 tri[i][j] +=tri[i-1][j..

[백준] 19621 회의실 배정 2 파이썬

문제 링크 : www.acmicpc.net/problem/19621 처음 접근한 방법은 완전탐색 알고리즘이였습니다. 가능한 경우의 수를 나열해보자는 방식이였는데, 경우의 수를 알아야 나열할 수 있는데 자꾸 재귀적으로 짤 수 밖에 없었고, 방법이 잘못되었단 생각이 들었습니다. 결국 실패해서 검색해보고 접근방법을 깊이우선탐색(DFS)로 변경하여 배웠습니다. [참고] [1]: jinho-study.tistory.com/926, [2]: txegg.tistory.com/138 푸는 방법 각 시간을 기준으로 잡았을 때 가능한지를 탐색해야 합니다. 1. 알고리즘 상의 탐색할 데이터의 끝을 설정하여, 끝에 다가갔다면 마지막 값을 리스트에 담습니다. 2. 끝이 아니라고 생각하면, 현재 값을 계속 추가해가며 더합니다. ..

728x90