[Python] Dependency Injector (1)
·
Language/Python
의존성 주입 패턴(Dependency Injection Pattern)은 일반적으로 객체 생성 시, 해당 객체가 의존하는 다른 객체를 직접 생성하는 것이 아니라 외부에서 주입받도록 하는 방법이다. 이를 통해 객체 간의 결합도가 낮아지기 때문에, 유지보수 및 코드 재사용성이 높일 수 있다. Dependency Injector는 Python에서 의존성 주입 패턴을 구현할 수 있게 도와주는 라이브러리 중 하나이다. 이를 사용해 객체 간의 결합도를 낮추고, 코드의 유연성과 확장성을 높일 수 있다. 처음에는 이런 개념이 잘 와닿지 않았다. 이러한 Dependency Injector의 개념과 기능들을 코드 예시와 함께 설명하면 좀 더 쉽게 이해할 수 있다. class Database: def __init__(sel..
[프로그래머스] 카드뭉치
·
PS/프로그래머스
카드뭉치 문제 설명 def solution(cards1: List[str], cards2: List[str], goal: List[str]) -> str: ... 영단어로 이루어진 두 배열 cards1과 cards2 를 번갈아가며 연속된 카드를 뽑아 goal 을 만들 수 있는지 여부를 반환하면 된다. 제한사항 1 ≤ cards1의 길이, cards2의 길이 ≤ 10 1 ≤ cards1[i]의 길이, cards2[i]의 길이 ≤ 10 cards1과 cards2에는 서로 다른 단어만 존재합니다. 2 ≤ goal의 길이 ≤ cards1의 길이 + cards2의 길이 1 ≤ goal[i]의 길이 ≤ 10 goal의 원소는 cards1과 cards2의 원소들로만 이루어져 있습니다. cards1, cards2, g..
[프로그래머스] 인사고과
·
PS/프로그래머스
프로그래머스 - 인사고과 문제설명 def solution(scores: List[List[int]]) -> int: ... scores result [[2,2],[1,4],[3,2],[3,2],[2,1]] 4 사원들의 태도 점수와 평가 점수가 [[2,2],[1,4],[3,2],[3,2],[2,1]] 처럼 한 쌍의 정수로 이루어진 배열로 입력된다. 임의의 사원보다 두 점수가 모두 낮은 경우가 있으면 그 사원은 제외된다. 사원들의 총점을 순서대로 나열할 때 scores[0]인 사원의 석차를 구하는 문제이다. 제한사항 1 ≤ scores의 길이 ≤ 100,000 scores의 각 행은 한 사원의 근무 태도 점수와 동료 평가 점수를 나타내며 [a, b] 형태입니다. scores[0]은 완호의 점수입니다. 0 ≤..
[프로그래머스] 시소 짝궁
·
PS/프로그래머스
코딩테스트 연습 - 시소 짝궁 문제 설명 def solution(weights: List[int]) -> int: ... 2(m), 3(m), 4(m) 거리의 지점에 좌석이 있는 시소가 평형이 되는 쌍의 갯수를 구하는 문제이다. solution 함수의 인자에 사람들의 몸무게 목록이 주어진다. 제한사항 2 ≤ weights의 길이 ≤ 100,000 100 ≤ weights[i] ≤ 1,000 몸무게 단위는 N(뉴턴)으로 주어집니다. 몸무게는 모두 정수입니다. 풀이 시소가 평형을 이루는지 확인하려면 두 사람의 무게와 각 좌석의 거리의 곱이 같은지 확인하면 된다. 이를 응용해서 몸무게1 / 몸무게2 == 거리2 / 거리1로 비율을 확인하면 된다. 문제에서 주어진 좌석의 거리는 2, 3, 4이다. 입력으로 주어..
[프로그래머스] 뒤에 있는 큰 수 찾기
·
PS/프로그래머스
코딩테스트 연습 - 뒤에 있는 큰 수 찾기 문제 설명 def solution(numbers: list) -> list: ... 정수로 이루어진 배열 numbers가 주어진다. 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 한다. numbers에서 각 원소의 뒷 큰수를 담은 배열을 구하는 문제이다. 만약 뒷 큰수가 존재하지 않으면 -1을 넣는다. 제한사항 4 ≤ numbers의 길이 ≤ 1,000,000 1 ≤ numbers[i] ≤ 1,000,000 풀이 복잡하게 풀려고 시도했지만 생각보다 간단한 방법으로 해결할 수 있었다. 접근 방법은 numbers 배열을 순회하며 숫자를 스택에 저장하고 스택에 담긴 숫자들의 뒷 큰수를 갱신하는 식으로 해결했다. ..
[프로그래머스] 호텔 대실
·
PS/프로그래머스
링크 문제 설명 입력으로 [입실 시간, 퇴실 시간] 쌍으로 이루어진 리스트가 주어진다. 예약 시간동안 그 방은 다른 사람이 사용할 수 없으며 청소시간이 있기 때문에 퇴실시간이 지난 후 10분 뒤에 새로운 손님을 받을 수 있다. 예약 목록이 주어졌을 때 필요한 최소 객실의 수를 구하는 문제이다. 제한사항 def solution(book_time: List) -> int: answer = 0 return answer 1 ≤ book_time의 길이 ≤ 1,000 book_time[i]는 ["HH:MM", "HH:MM"]의 형태로 이루어진 배열입니다 [대실 시작 시각, 대실 종료 시각] 형태입니다. 시각은 HH:MM 형태로 24시간 표기법을 따르며, "00:00" 부터 "23:59" 까지로 주어집니다. 예약 ..
[Python] ensure_future
·
Language/Python
asyncio를 사용하다가 혼동되는 부분이 많다. 대표적으로는 Task와 Future의 차이가 있을 것이다. asyncio.create_task()와 asyncio.ensure_future() 또한 혼동되는 부분이다. 예제 코드를 찾아보면 ensure_future를 사용하는 코드도 간간히 볼 수 있었다. 두 함수 모두 코루틴을 실행하기 위해 사용될 수 있기 때문에 혼용해서 쓰는 경우가 많은 것 같다. 각 함수의 역할을 더 정확히 알아보고 이에 대해 정리했다.​ximport asyncio​async def f(): pass​coro = f()loop = asyncio.get_event_loop()​task1 = loop.create_task(coro)assert isinstance(task1, asynci..
[Python] Queue
·
Language/Python
멀티 쓰레드 프로그래밍을 할 때 큐와 쓰레드를 혼합해 사용하면 비교적 간단하게 문제를 해결할 수 있다. 작업 큐를 만들어 처리할 작업들을 큐에 저장하고 각 쓰레드는 큐에서 작업들을 하나씩 가져와 처리하는 방식이 일반적이다. 파이썬에서는 이를 위해 멀티 쓰레드 환경에서 사용할 수 있는 Queue를 제공한다.Queue의 핵심 함수는 아래 3개가 있다. 이외에도 qsize(), empty(), full()이 있는데 적절히 사용하면 된다.put/get : 큐에 데이터를 삽입/삭제한다.task_done : 큐에서 작업이 완료되었다.join : 큐의 모든 작업이 끝날때까지 대기한다.put/get은 일반적인 큐와 동일하게 데이터를 삽입하고 가져오는 함수이다. 그 이외 task_done과 join은 기존 큐에서는 볼 ..