목록코테 공부/알고리즘 (20)
dmswl
1. 인덱스 이중접근 조심하기! 2. re.sub()정규표현식 형태!!!! 3. 다중집합 : Counter()한 리스트에서 중복되는요소 유지하고 합집합, 교집합 계산하려면 Counter 써야 함1) Counter1 & Counter2 나 Counter1 | Counter2 는 요소의 종류만 비교함. 즉, 단순히 각 집합에 중복을 무시한 요소의 종류만 비교하게 된다.따라서, 이 경우, list((Counter1 & Counter2).elements())를 해서 요소를 직접 가져와서 비교해주기!!!!

1. 이웃한 두 쌍끼리 묶기[1,2,3,4,5] -> [1,2] [2,3] [3,4] [4,5]for p1, p2 in zip(list, list[1:]):출처: 해시 > 전화번호목록 코드def solution(phone_book): p_sorted = sorted(phone_book) for i in range(len(p_sorted) - 1): if p_sorted[i] == p_sorted[i+1][:len(p_sorted[i])]: return False else: return True 2. 리스트에서 unique값 구하고 싶으면? set() 3. Counter 함수(클래스)는 뺄셈을 지원한다!! 각 key, value값끼리 빼..
2차원 리스트 -> 1차원 리스트 flatten sum(이중 리스트,[]) 리스트 모든 원소의 곱 구하기 from functools import reduce arr = [1, 2, 3, 4, 5] def multiply(arr): return reduce(lambda x, y: x * y, arr) multiply(arr) 아니면.. 그냥 리스트 컴프리헨션으로... 수열로 인덱싱 슬라이싱의 활용: [start:stop:step] 을 명시하여 부분을 추출 ex) 홀수번쨰만 인덱싱 list[1:len(list)+1:2] 이차원 배열 생성할 때 얕은 복사 주의!!!! [[0]*n]*n 형식으로 2차원 배열을 선언하면 얕은 복사가 이루어져 [0][0]=1이 되면 [1][0]=1,[2][0]=1...[n-1][0..
1. 정규표현식이란? (Regular Expressions) 특정 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어 복잡한 문자열 검색과 치환을 위해 사용 2. 메타 문자(Meta characters) 원래 의미가 아닌 특별한 용도로 사용되는 문자 1) [] 문자 클래스 정규표현식에서 []는 대괄호 안에 포함된 문자들 중 하나와 매치를 뜻함. **앞에 \ 안붙임 [abc]# abc 중 하나와 매치 [] 안의 두 문자에 -를 사용하면 두 문자 사이의 범위를 뜻함 [a-c]# [abc] [0-5]# [012345] [a-zA-Z]# 모든 알파벳 [0-9]# 숫자 2) 자주 사용하는 문자 클래스 문자 클래스 설명 \d [0-9] \D [^0-9] \w [a-zA-Z0-9] \W [^a-zA-Z0-9..
내 풀이 (_idx 리스트와 )_idx 리스트를 만들어서 i) 일단 (_idx 리스트의 길이 != )_idx 리스트의 길이이면 괄호 쌍이 안맞는다는 뜻이니까 False 리턴 ii) 다음으로 쌍으로 돌면서 (_idx 가 )_idx보다 크면 괄호 쌍이 완성되지 않는다는 뜻이니까 False 리턴 i), ii)를 만족하지 않는다면 괄호 쌍이 올바르게 맞는다는 뜻이므로 True 리턴 근데 너무 for문이 많고 인덱스를 두 개의 리스트로 관리한다는 점에서 메모리 비효율적인 것 같았다. def solution(s): answer = True l_idx = [] r_idx = [] for i, c in enumerate(s): if c == '(': l_idx.append(i) else: r_idx.append(i) ..
문제 이해 만약, 배열 A의 최솟값 배열 B의 최솟값: 배열 B의 최솟값이랑 배열 A의 최댓값을 곱해줘야 함. 문제 풀이 방향 1. A에서 최솟값 찾고 B에서 최솟값 찾아서 비교 2. 둘 중 더 작은 최솟값을 가지는 배열에서 최솟값을 선택하고, 나머지 배열에서 최댓값 선택 3. 꺼낸 값은 지우기 - 여기서 내림차순으로 정렬한 데크로 구현. (만약 최솟값을 안꺼냈다면, 다시 append 하기 -> 방금 꺼낸 자리에 append 해야하므로 내림차순 정렬 & pop() 이용) 4. 1,2,3 과정 반복 from collections import deque def solution(A,B): answer =..
⭐주의사항 제한 조건을 꼼꼼히 보자!!!!!!!!!!!!! 제한 조건에 대한 test case를 미리 추가해놓자!!!!!!!!!!!!!!!!!!!! 제한 조건 s는 길이 1 이상 200 이하인 문자열입니다. s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다. 숫자는 단어의 첫 문자로만 나옵니다. 숫자로만 이루어진 단어는 없습니다. 공백문자가 연속해서 나올 수 있습니다. 공백문자가 연속해서 나올 수 있습니다. 정규식으로 숫자 또는 알파벳인 경우의 인덱스를 저장하고 그 인덱스 자리에 변환한 문자열을 넣어야 하나? -> 아니면 매 문자열이 끝날때마다 공백 개수를 count해서 붙여야하나 - 이걸로 가자! capitalize() 내장 함수 이용 : 첫글자만 대문자로 나머지는 소문자로 바꿔주는 함수 de..
리스트.sort() : 리스트를 제자리 정렬. inplace = True 느낌. None 값을 리턴하니 리스트2 = 리스트1.sort() (X) sorted(리스트) : 정렬 결과를 별도로 리턴 ⭐ key= 옵션을 지정해서 정렬을 위한 키 또는 함수를 별도로 지정할 수 있음. ex) 정렬을 위한 함수로 길이를 구하는 len을 지정한 경우 => 문자열 알파벳 순서가 아닌 길이 순서로 정렬됨. >>>c = ['ccc', 'aaaa', 'd', 'bb'] >>>sorted(c, key = len) ['d', 'bb', 'ccc', 'aaaa'] ex) 첫 문자열과 마지막 문자열 순으로 정렬하기 a = ['cde', 'cfc', 'abc'] def fn(s): return s[0], s[-1] print(sor..