본문 바로가기

분류 전체보기

(107)
[Python] BOJ 1010 다리놓기 이 문제는 복잡하게 생각하면 절대로 못 푸는 문제다. 간단하게 강 동쪽 사이트에서 강 서쪽 사이트 개수를 뽑는 조합을 생각하면 된다. 조합인 이유는 문제에서도 나와있다시피 다리를 교차해서 놓을 수 없다. 예를 들어 N=2, M=5라고 할 때, M으로 연결할 수 있는 사이트 N개를 뽑는 조합과 같은데 다섯 개 중에 두개를 뽑는 조합의 수는 그림[1]의 경우와 그림 [2]의 경우가 같은 경우이기 때문에 자연스럽게 다리가 교차되는 것의 경우의 수는 빠지게 된다. 자바로 이 문제를 풀면 오버플로우 문제로 인해 복잡하게 동적계획법, 조합 이론 등을 사용해야 하지만 파이썬은 앞선 포스팅에서도 다뤘다시피 오버플로우 문제가 발생하지 않기 때문에 파이썬으로 구현하면 다음과 같다. def fact2(n,m): sum = ..
[Python] BOJ 11051 이항 계수2 이 문제를 처음엔 자바로 풀려고 했지만 12! 이 넘어가면 int 형을 초과하고 20! 을 넘어가면 long 형을 초과하여 엉뚱한 숫자가 튀어나온다. 이를 해결하기 위해선 모듈러 증명과 페르마의 소정리에 대한 수학적 지식이 있어야 알고리즘으로 접근할 수 있다. 정석으로 풀기 위해선 이분 블로그를 참고하면 좋을 것 같다. https://st-lab.tistory.com/162 [백준] 11051번 : 이항 계수 2 - JAVA [자바] www.acmicpc.net/problem/11051 11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 문제 이전의 이항 계수 1 문제와 같은 문제다...
[JAVA + Python] BOJ 2981 검문 왜 정답 비율이 저렇게 낮은지 알법한 문제였다. 처음엔 유클리드 호제법을 알지 못한 체 무작정 최대 공약수 구하다 보니 시간 초과가 정말 괴롭게 했다.. 수학적으로 접근하는 방법도 있지만 필자는 숫자들의 패턴을 보고 알고리즘에 접근했다. 예를 들어 N=2, 주어진 입력값은 [2, 12] 라고 할 때 M은 2, 5, 10이다 이를 보고 알아낸 것은 같은 M을 가지려면 두 수의 차의 약수를 구하면 되는구나라고 생각했다. 12-2 = 10이고 10의 공약수는 1을 뺀 2, 5, 10이 되기 때문이다. 만약 N=3 이고 2, 12, 18 가 주어진다면 M은 2 뿐이다. 2와 12의 차이는 10이고 18과 12의 차이는 6이기 때문에 10과 6의 최대 공약수는 2이고 최대 공약수의 약수 중 1을 제외하면 2만 남..
신영증권 기업분석 Information 기업명 : 신영증권 001720 사업 : 증권업 CEO : 원종석, 황성엽 CEO 이력 : 1962년 원종석은 신영증권 대표이사 부회장이다. 출퇴근 길에 종종 자전거를 타고 다니는 등 소탈한 성격이지만 사업에 있어서는 모든 상황과 가정을 하나하나 세워나가는 꼼꼼한 면모를 보여주고 있다. 1961년 10월22일 서울에서 원국희 신영증권 회장과 민숙기 씨의 외아들로 태어났다. 경기고등학교와 중앙대학교 토목공학과를 졸업했다. 1988년 신영증권에 입사해 2005년 5월 대표이사에 오르기 전까지 국제부, 기획조정실, 조사부, 영업지점을 두루 거쳤다. 일반사원들과 동일하게 승진절차를 밟아 올라왔다. 한국금융투자협회 자율규제위원, 한국 예탁결제원 사외이사로 활동했다. 수익보다 고객과 장기적 신..
[JAVA + Python] BOJ 1934 최소공배수 간단하게 최소공배수를 구하는 문제이다. 이 문제는 자바랑 파이썬으로 동시에 풀어봤는데 그 실행시간의 차이가 커서 기록해두고자 한다. 우선 같은 알고리즘을 사용했다. 두 수 A와 B가 주어졌을 때 작은 값을 Min, 큰 값을 Max로 저장하고 반복문을 1부터 Min까지 하나씩 증가하면서(i라 하겠다) (Max*i)% Min==0 인 i값을 찾으면 break로 탈출하는 것이다. 파이썬으로 먼저 보면 다음과 같다. T = int(input()) for i in range (T): A, B = map(int, input().split()) Min = min(A,B) Max = max(A,B) for i in range(1,Min+1): if (Max*i)%Min==0: print(Max*i) break 코드의 ..
[JAVA] BOJ 13305 주유소 문제가 꽤나 길지만 단순하다. 목적지까지 가기 위해 최소비용으로 기름을 넣는 문제인데, 지금 앞에 있는 주유소가 다음 주유소보다 싸면 더 많이 넣고 더 비싸면 다음 주유소까지 갈 수 있을 정도만 넣고 다음 주유소에서 넣는 것과 같다. 예제 입력 1 예로 들면 기름 리터 당 값이 [5, 2, 4, 1]이고 거리가 [2, 3, 1] 일 때 처음엔 무조건 기름을 넣어야 하므로 5를 최솟값으로 저장하고 5의 가격으로 주유한다. 5 * 2 = 10 다음, 최소값인 5와 2를 비교하여 2가 더 작으므로 2를 최솟값으로 저장하고 2의 가격으로 주유한다. 2 * 3 = 6 다음, 최소값인 2와 4를 비교하여 2가 더 작으므로 2를 최솟값으로 저장하고 2의 가격으로 주유한다. 2 * 1 = 2 합은 18이 된다. 예제 ..
Mod_wsgi를 이용해 장고 프로젝트를 리눅스 우분투, Apache 에 Deploy하기 Preview 리눅스 우분투 OS에 대한 이해가 많이 부족한 상황에서 프로젝트의 도메인이 나와 더 이상 DJango runserver로 테스트할 수 없는 상황이 되어 mod_wsgi를 이용해 Deploy 하기로 했습니다. 이 과정에서 제가 겪은 다이내믹(?) 한 일들을 기록해보고자 합니다. WSGI 우선 wsgi는 Web Server Gateway Interface라고 해서 웹서버(아파치와 NginX)와 파이썬 애플리케이션을 연결시키기 위한 인터페이스 입니다. 쉽게 말해 제가 작성한 장고 프로젝트는 파이썬으로 짜여있기 때문에 장고 자체 서버인 runserver를 돌리는 데는 무리가 없지만 정적 웹 서버인 아파치는 이를 해석할 수 있는 방법이 없습니다. 아파치는 사용자로부터 request를 받으면 Wsgi..
[JAVA] BOJ 1541 잃어버린 괄호 숫자와 +, - 연산자가 주어졌을 때 괄호를 넣어서 최솟값을 만드는 문제이다. 그리디 알고리즘은 인간의 두뇌와 정말 비슷한 알고리즘을 가진 것 같다. 이 문제를 봤을 때 사람은 당연히 - 뒤에 오는 숫자는 커야 하고 그렇기 때문에 - 뒤에 오는 숫자의 값을 크게 하기 위해선 +이면 괄호를 쳐주고 -이면 괄호를 치지 않고 진행할 것이다. 따라서 필자는 주어진 입력값을 -로 분리한 후 +로 분리하는 과정을 거쳤다. 무슨 말인가 하면, 55-50+40의 문자열이 주어졌을 때 -로 split("-")을 하게 되면 55와 50+40 이 남는다. 다른 예로 125-50-30+20 이 주어지면 125, 50, 30 + 20 이 남는다. 이때 나누어진 수대로 반복문을 돌며 해당 요소를 다시 +로 split("+") 한..