[프로그래머스] 완전범죄
·
CS/PS
문제A도둑과 B도둑이 팀을 이루어 모든 물건을 훔치려고 합니다. 단, 각 도둑이 물건을 훔칠 때 남기는 흔적이 누적되면 경찰에 붙잡히기 때문에, 두 도둑 중 누구도 경찰에 붙잡히지 않도록 흔적을 최소화해야 합니다.물건을 훔칠 때 조건은 아래와 같습니다.물건 i를 훔칠 때,A도둑이 훔치면 info\[i\]\[0\]개의 A에 대한 흔적을 남깁니다.B도둑이 훔치면 info\[i\]\[1\]개의 B에 대한 흔적을 남깁니다.각 물건에 대해 A도둑과 B도둑이 남기는 흔적의 개수는 1 이상 3 이하입니다.경찰에 붙잡히는 조건은 아래와 같습니다.A도둑은 자신이 남긴 흔적의 누적 개수가 n개 이상이면 경찰에 붙잡힙니다.B도둑은 자신이 남긴 흔적의 누적 개수가 m개 이상이면 경찰에 붙잡힙니다.각 물건을 훔칠 때 생기는 흔..
[카카오] 시험장 나누기
·
CS/PS
문제카카오 인턴을 선발하는 코딩 테스트 시험장이 하나의 이진 트리 형태로 연결되어 있습니다. 아래 그림은 12개의 시험장이 연결된 예시입니다.1. 하나의 노드는 하나의 시험장을 나타냅니다.2. 검은 바탕의 흰 숫자는 해당 시험장의 고유 번호(ID)를 나타냅니다.2-1. 시험장이 n개 있다면, 시험장의 고유 번호는 0부터 n-1까지 부여됩니다.3. 노드 안의 빨간 숫자는, 해당 시험장의 응시자 수를 나타냅니다.3-1. 위의 그림에서, 9번 시험장에는 10명, 4번 시험장에는 8명, 6번 시험장에는 20명의 응시자가 시험을 볼 예정입니다.4. 노드 사이의 간선은 해당 시험장이 연결되어 있음을 의미합니다.4-1. 위의 그림에서, 9번 시험장은 7번 시험장과, 7번 시험장은 6번 시험장과 연결되어 있습니다.코딩..
[프로그래머스] 전력망을 둘로 나누기
·
CS/PS
문제n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있습니다. 당신은 이 전선들 중 하나를 끊어서 현재의 전력망 네트워크를 2개로 분할하려고 합니다. 이때, 두 전력망이 갖게 되는 송전탑의 개수를 최대한 비슷하게 맞추고자 합니다. 송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어집니다. 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누었을 때, 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값)를 return 하도록 solution 함수를 완성해주세요.예시Example 1.입력9[[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]]출력3Example 2.입력4출력[[1,2],[2,3],[3,4]]Example 3.입력..
[Python] Syntax | 04. import
·
Language/Python
import는 외부 파일(모듈)이나 폴더(패키지)에 작성된 코드를 가져와 사용하는 기능입니다.동작 과정import는 코드가 실행되는 런타임에서, import 줄을 만났을 때 실행됩니다. 그래서 코드를 실행하기 전 까지는 모듈을 가져오지 않습니다.import를 통해 가져오는 코드들도 caching의 대상이 될 수 있습니다. 만약 처음 import 하는 모듈(또는 패키지)라면, sys.path를 참고하여 해당 모듈이 위치한 경로를 따라 코드를 가져옵니다. 첫 import가 완료되면, sys.module라는 dictionary 객체에 해당 모듈 코드를 저장합니다. 이후에 같은 모듈을 import 하면, sys.module에서 그 모듈이 존재하는지 확인합니다. 존재한다면 저장된 객체 주소를 불러와 사용합니다.작..
[Python] Syntax | 03. Decorator(@)
·
Language/Python
데코레이터(Decorator)는 기존 함수의 코드를 직접 수정하지 않으면서 새로운 기능을 추가하는 기능입니다.표기법(@)데코레이터도 일종의 함수입니다. 단, 목표하는 함수를 인자로 받아 그 함수 앞뒤로 추가 기능을 구현한 새로운 함수(일반적으로 wrapper라고 부릅니다)를 반환한다는 특징이 있습니다.def my_decorator(func): def wrapper(): print("--- 함수 실행 전 ---") func() # 데코레이터가 적용될 함수 print("--- 함수 실행 후 ---") return wrapper # 새로운 함수를 반환합니다def say_hello(): print("안녕하세요!")dec_say_hello =..
[Python] Event Loop
·
Language/Python
Event Loop는 프로그램이 single thread로 동작하면서도 여러 개의 작업을 동시에 실행하여 multi threading 처럼 보이게 해주는 시스템입니다.구성요소Python의 event loop는 크게 call stack과 ready queue 부분으로 나누어져 있습니다.call stack : 호출된 함수가 쌓이는 공간입니다. 해결된 함수는 call stack에서 제거됩니다. Event loops는 함수가 실행되는 동안 제어권을 넘겨줬다가 함수가 종료될 때 다시 제어권을 받습니다.ready queue : task*들이 call stack에 쌓이기 위해 대기하는 공간입니다. Call stack이 비면 task를 하나씩 빼서 call stack에 추가합니다.*task : coroutine(비동기..
[Python] Library | 08. asyncio
·
Language/Python
asyncio는 coroutine을 사용하여 Python에서 비동기 처리를 구현할 수 있게 해주는 라이브러리입니다.async-await 구문 (Coroutine)비동기 함수를 선언하고 그 안에서 비동기 작업을 기다립니다. await과 함께 나오는 작업이 다 완료되기 전 까지는 다음 줄이 실행되지 않습니다. 여기서 async def로 정의된 함수를 coroutine이라고 합니다.import asyncioasync def say_after(delay, what): await asyncio.sleep(delay) # delay만큼 시간이 흐르기 전까지는 더 진행되지 않습니다. return whatrun()async 함수를 실행하려면 asyncio.run()을 사용하면 됩니다. 일반적으로 진입점에서..
[Python] Closure
·
Language/Python
Closure는 자신을 둘러싼 바깥쪽 함수가 종료된 후에도 그 안의 변수를 기억하고 사용할 수 있는 함수를 말합니다. 함수가 정의될 시점의 바깥 상태를 통째로 감싸서(enclose) 보관하는 것입니다.Closure의 조건바깥쪽 함수가 존재하는 함수라는 점에서 closure는 중첩함수(Nested Function)여야 한다는 것을 알 수 있습니다. 하지만 모든 중첩함수가 closure인 것은 아닙니다. Clousure는 아래 세 가지 조건을 만족해야 합니다.중첩함수일 것안쪽 함수가 바깐쪽 함수의 변수를 참조할 것바깥쪽 함수가 안쪽 함수를 반환값으로 사용할 것# 조건 1 : 중접함def outer_func(message): # 조건들을 만족한 inner_func는 closure가 됩니다. def ..