목록분류 전체보기 (241)
내가 하고싶은 건 다 하는 공간
1. 개방 폐쇄 원칙(OCP: Open-Closed Principle)이란? - 기존 코드를 변경하지 않으면서, 새로운 기능을 추가할 수 있도록 설계되어야 한다는 원칙 - 확장(새로운 기능 추가)에는 열려있고, 수정에는 닫혀있음 - 다형성과 확장이라는 객체 지향의 장점을 극대화 - * 다형성: 기능을 변경하더라도 애플리케이션 전체를 바꿀 필요는 없음 따라서 기능을 추가할 때, 1)추상화 클래스 추가 2)상속관계 맞추기 이 두가지 단계만으로 유연한 확장이 가능하다. 2. 원칙으로 무엇을 지켜야 하나? 1. 변경(확장)될 것과 변하지 않을 것을 엄격히 구분한다. 2. 이 두 모듈이 만나는 지점에 추상화(추상클래스 or 인터페이스)를 정의한다. 3. 구현체에 의존하기보다 정의한 추상화에 의존하도록 코드를 작성..
문제 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다. 각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다. 입력 첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각 로프가 버틸 수..
맨날 input(), input().split()만 쓰다가, 뭔가 더 간편하고 속도도 빠른 방법은 없을지 찾아보았다. [상황 1] 한 줄에 여러 값을 int타입으로 받고, 이를 리스트로 저장하는 상황 사용할 함수: input(), split(), map(), list() n = list(map(int, input().split())) n # [3, 6, 9, 12, 15] [상황 2] 여러 줄에 걸쳐 여러 값을 int타입으로 받고, 이를 리스트로 저장하는 상황 import sys sys.stdin.read().splitlines()로 줄별로 입력값을 읽어온다. 그리고 그 값을 리스트에 넣는다. import sys data = sys.stdin.read().splitlines() [추가] input() 대..
BFS = Breath First Search 너비 우선 탐색 가장 가까이에 있는 노드부터 우선 탐색 일반적인 경우 실제 수행시간은 DFS보다 좋다. collections 모듈의 deque 라이브러리를 사용한다. 예제 코드 from collections import deque # BFS 메서드 정의 def bfs(graph, start, visited): # 큐 구현을 위해 deque 라이브러리 사용 queue = deque([start]) # 탐색한 노드를 방문처리 visited[start] = True # 큐가 빈 상태가 될 때까지 반복 while queue: v = queue.popleft() print(v, end = ' ') # 탐색한 노드와 연결되어 있지만 아직 안 읽은 노드들을 큐에 삽입 f..

DFS/BFS... 생전 처음 들어보는 내용이라 더욱더 자세하게 정독했다. 일단 DFS/BFS를 시작하기 전에 탐색, 자료구조, 오버플로, 언더플로, 스택, 큐, 재귀함수 등의 용어를 알아야 한다. 탐색 = 원하는 데이터를 찾는 과정 자료구조 = 데이터를 표현하고 관리하고 처리하기 위한 구조(스택과 큐가 자료구조의 개념) - 삽입(Push) & 삭제(Pop) 스택 vs 큐 - 스택은 선입후출, 큐는 선입선출 큐 - 큐를 구현할 때 collections 모듈에서 제공하는 deque 자료구조 활용 - from collections import deque queue = deque() queue.popleft() #왼쪽에 삭제 queue.append() #오른쪽에 삽입 queue.reverse() #리스트 자체..
문제 홍준이는 요즘 주식에 빠져있다. 그는 미래를 내다보는 눈이 뛰어나, 날 별로 주가를 예상하고 언제나 그게 맞아떨어진다. 매일 그는 아래 세 가지 중 한 행동을 한다. 주식 하나를 산다. 원하는 만큼 가지고 있는 주식을 판다. 아무것도 안한다. 홍준이는 미래를 예상하는 뛰어난 안목을 가졌지만, 어떻게 해야 자신이 최대 이익을 얻을 수 있는지 모른다. 따라서 당신에게 날 별로 주식의 가격을 알려주었을 때, 최대 이익이 얼마나 되는지 계산을 해달라고 부탁했다. 예를 들어 날 수가 3일이고 날 별로 주가가 10, 7, 6일 때, 주가가 계속 감소하므로 최대 이익은 0이 된다. 그러나 만약 날 별로 주가가 3, 5, 9일 때는 처음 두 날에 주식을 하나씩 사고, 마지막날 다 팔아 버리면 이익이 10이 된다...