본문 바로가기

프로그래밍

Python OS module 정리 import os os.listdir(path) path의 모든 파일/폴더을 보여줍니다. os.walk(path) path안의 모든 파일에 대하여 디렉토리로 묶어줍니다. os.getcwd() 현재 작업 공간을 보여줍니다. os.chdir(path) path로 작업 공간을 바꿉니다. 현재 작업공간의 Sub directory까지 모든 파일을 탐색하는 방법 주의사항: 내부적으로 파일이 너무 많은 위치에서 사용시 탐색을 엄청 많이 합니다. ex) os.walk('C:') 엄청 오래 시간 걸려요. for dirname, _, filenames in os.walk('/kaggle/input'): for filename in filenames: print(os.path.join(dirname, filename)) w.. 더보기
[백준 1541 파이썬 ] Greedy Algorithm 4 - 잃어버린 괄호 문제 세준이는 양수와 +, -, 그리고 괄호를 가지고 길이가 최대 50인 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오. 입력 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 출력 첫째 줄에 정답을 출력한다. 풀이 전략 숫자의 연산 순서에 따라서 값이 다릅니다. 큰 수를 빼는 게, 작은 수를 빼는 것보다 값이 작아집니다. 따라서 더하기 연산을.. 더보기
[백준 11399 파이썬 ] Greedy Algorithm 3 - ATM 문제 인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다. 사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다.. 더보기
[백준 1931 파이썬 ] Greedy Algorithm 2 - 회의실 배정 문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거.. 더보기
[백준 11047 파이썬 ] Greedy Algorithm 1 - 동전 0 문제 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다. 동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) 출력 첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. 풀이 전략 현재 값 K보다 작거나 같으면서 가장 큰 수 A를 찾습니다. K 값을 A로 나눠준 몫 Q를 구합니다. K 값에서 A*Q 값을 빼줍니다. 동전을 사용한 게 .. 더보기
[프로그래밍문제] 중괄호 해제하기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 def recur(string): # 숫자찾기 a = -1 for i in range(len(string)): if ord('0') 더보기
State Machine Diagram 에 대한 설명 모든 객체들은 생성부터 삭제되기까지 유한 개의 상태를 지니며 객체의 상태를 표현하기 위해서 사용되는 것이 State Machine Diagram(State Chart) 입니다. 객체의 상태와 전이(상태를 바꾸는 행동)을 나타내기 위해서 SMD에는 두 개의 키워드가 있습니다. State: 객체의 상태 Transition: 객체의 상태를 바꾸는 event State State를 나타내는 방법은 두 가지가 있습니다. 단순히 상태만 나타내는 경우와 상태에 들어가기 전, 후, 중간에 하는 활동을 추가하는 경우입니다. entry/Activity(): Object가 S 상태에 들어왔을 때 Activity()를 실행합니다. exit / Activity(): Object가 S 상태서 나갈 때 Activity()를 실행합.. 더보기
OCL(The Object Constraint Language) 예제를 기반으로한 설명 OCL? OCL은 1995년 IBM에서 Insurance division에 대한 비지니스 모델을 작성하기 위해서 개발되었고 UML version 1.1에 추가가 되었습니다. UML은 객체들에 대한 관계를 표현할 수 있지만 제약사항에 대한 표현의 한계를 지니고 있습니다. 예를 들어서 Mortgage(대출)에 startDate와 endDate가 있는데 startDate는 항상 endDate보다 빨라야 한다는 제약사항을 UML에서는 표현할 수 없습니다. 이러한 문제를 해결하기 위해서 개발된 것이 OCL입니다. OCL은 Object Oriented System에 제약사항을 추가하는 역할로 생각하시면 됩니다. OCL을 사용하는 부분 class와 type의 invariant 메소드의 pre- 와 post- cond.. 더보기