알고리즘 공부💥 98

[알고리듬] 파이썬 함수 lambda

람다함수란 ? 일반함수를 굳이 def ~ return으로 선언하지 않고 가볍게 만들 수 있는 연산함수 # 예를 들어 def is_even(x): if x % 2 == 0: return True return False # 아래처럼 람다함수로 변환 가능 is_even = lambda x : x % 2 == 0 # 사용 법은 둘 다 is_even(1) is_even(2) ... lambda & map함수 람다함수는 map함수랑 짝지어서 자주 사용됨 ! map함수는 리스트나, 튜플에 어떠한 처리를 할 때 사용하는 함수로 map(함수, 리스트) 식으로 첫번째 인자에는 함수, 두번째 인자에는 리스트(or튜플)를 받음 # 흔히 공백으로 이루어진 숫자리스트를 인풋 받을 때 아래와 같이 받는데 number_list = ..

[알고리듬] 파이썬 라이브러리 deque

데크(deque)는 양방향 큐이다. 양쪽 방향에서 요소를 추가하거나 제거할 수 있다. 즉 일반적인 리스트의 경우 pop()보다 pop(0)을 할 경우 메모리 사용량이 늘어난다. 그 이유는 pop(0)의 경우 pop(0)을 하고 리스트를 맨 끝부터 앞으로 한 칸 씩 이동시키는 작업을 하기 때문이다. 그런데 deque는 양방향 큐니깐 pop(0)이나 pop()이나 똑같다는 뜻! 즉 deque를 쓸 경우 확률상 양 끝 엘리먼트의 append와 pop이 압도적으로 빠르다. 심지어 사용법도 쉬움.. 앞으로 deque에 익숙해지도록 하자 from collections import deque deq = deque() # 리스트 맨 앞에 요소 추가 deq.appendleft('요소') # 리스트 뒤에 요소 추가 (일반..

[알고리듬] 파이썬 라이브러리 defaultdict

A라는 딕셔너리를 선언하고 key값으로 접근했을 때 만약 A[key]가 처음 접근된 친구면 **KeyError**를 일으킨다! 그래서 특히 dict에 value값으로 리스트를 삼을때 리스트가 처음 추가되는지 아닌지 if / else로 분기처리를 해준다. defaultdict는 그러한 수고로움을 덜어준다. 처음 접근되는 key일지라도 기본적으로 제공되는 기본값이 존재하기 때문! from collections import defaultdict defaultdict(list) 기본 값으로 빈 리스트 []를 제공 -> 처음 접근하는 key값이어도 A[key].append('블라블라') 가능! defaultdict(int) 기본 값으로 숫자 0 제공 defaultdict(set) 기본 값으로 빈 set 제공 my..

[알고리듬] 파이썬 라이브러리 Counter

무시무시한 친구를 알아버렸다. 리스트의 요소 갯수를 바로 알아버리는 친구다.😱 사용법은 아래와 같다. 심지어 쉬움! Counter라는 라이브러리에 리스트를 넣어서 반환값을 print해보면 dict 형태로 요소마다 카운팅을하여 출력됨을 알 수 있다! from collections import Counter a = [1,1,1,2,3,4,5,5,5,6,7,8,8,8,8] c = Counter(a) print(c) # Counter({8: 4, 1: 3, 5: 3, 2: 1, 3: 1, 4: 1, 6: 1, 7: 1}) for i in c: print('중복없이', i) print('------') # 마치 set함수에 넣은 듯한 느낌으로 중복없이 출력 할수도 있다. # 중복없이 1 # ------ # 중복없..

[jungol] Intermediate_Coder / 분할과정복 / 1335 / T색종이 만들기(영역구분) / python

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=614&sca=3010 JUNGOL www.jungol.co.kr 👀문제접근 1. 재귀함수를 이용해서 분할과 정복하자 2. 사각형의 왼쪽 위 좌표와 사각형 변의 길이를 파라미터로 갱신 3. 만약 사각형 내에 다른 색깔이 공존하면 왼쪽 위 좌표와 변의 길이를 4등분으로 조절하여 재귀함수 호출 4. 사각형 내에 색깔이 하나밖에 없다면 그 전역변수로 선언된 색깔 카운팅 + 1 🌈코드구현 N = int(input()) board = [list(map(int, input().split())) for _ in range(N)] blue = 0 white = 0 def check(x, y, size): globa..

[알고리듬] 플로이드-워셜 알고리즘 / python

모든 최단 경로를 구하는 알고리즘 노드 간의 최단 경로를 입려겨한 2차원 행렬을 구성한다. 경유지를 설정하고. 각 시행마다 새로운 경유지로 교체해가며, 기존의 출발->도착 경로와 출발->new경유지->도착의 경로를 비교하여 더 짧은 경로를 선택한다. n = 6 fares = [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] # n : 노드의 수 # fares : 출발, 도착, 요금의 정보가 주어진다고 했을 때 INF = 1e10 # 충분히 큰 수 # dist -> x에서 y로 가는 운임 나타내는 2차원 요금지도 dist = [[INF for _ in range(n..

[프로그래머스] 위장 / python

위장 문제 설명 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. clo..

[프로그래머스] 전화번호 목록 / python

전화번호 목록 문제 설명 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다. 입..

[프로그래머스] 완주하지 못한 선수 / python

완주하지 못한 선수 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 participantcompletionreturn ["l..

[프로그래머스] 구명보트 / python

구명보트 문제 설명 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다. 구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다. 사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 작..