본문 바로가기
728x90
반응형

오블완21

[Python] zip()함수와 * 활용 zip() 함수zip() 함수는 2개 이상의 시퀀스(리스트, 튜플 등)를 짧은 길이를 기준으로 일대일 대응하는 새로운 튜플 시퀀스를 만든다.a = [1,2,3,4,5]b = [2,3,4,5]c = [3,4,5]zip(a,b) # 결과: list(zip(a,b))# 결과: [(1, 2), (2, 3), (3, 4), (4, 5)]list(zip(a,b,c))# 결과: [(1, 2, 3), (2, 3, 4), (3, 4, 5)]파이썬 3+에서는 zip() 함수가 제너레이터를 반환하므로, 결과를 바로 보려면 list()로 묶어야 한다.zip() 함수는 리스트가 아닌 튜플로 시퀀스를 생성하므로, 값을 변경할 수 없는 불변 객체이다. d = list(zip(a,b,c))d[0] # (1,2,3)d[0][0] .. 2024. 11. 11.
11장. 해시 테이블(6) - 예제(상위 K빈도 요소) 상위 k번 이상 등장하는 요소를 추출하라입력: num = [1,1,1,2,2,3] , k=2출력: [1,2]  풀이1. Counter와 우선순위 큐(힙)를 활용한 방법[해결 아이디어]collections.Counter를 사용해 각 요소의 빈도 수를 구하고, 상위 k개를 heapq 모듈의 힙을 이용해 추출한다. 파이썬에서 힙은 최소 힙만 지원하므로, 빈도를 음수로 변환하여 가장 큰 빈도부터 추출할 수 있도록 만든다.[단계별 풀이] 1. 빈도 계산: Counter로 요소별 빈도를 계산import collectionsnum = [1,1,1,2,2,3]freqs = collections.Counter(num) # 결과: # Counter({1: 3, 2: 2, 3: 1})   2. 힙에 삽입: 각 요소의 빈도 .. 2024. 11. 10.
11장. 해시 테이블(5) - 예제(중복 문자 없는 가장 긴 부분 문자열) 중복 문자가 없는 가장 긴 부분 문자열의 길이를 리턴한다.입력: "abcabcbb"출력: 3입력: "pwwkew"출력: 3  풀이1. 슬라이딩 윈도우와 투 포인터로 사이즈 조절이 문제는 "슬라이딩 윈도우"와 "두 포인터" 기법을 사용하여 해결할 수 있다.슬라이딩 윈도우는 문자열의 특정 구간을 반복적으로 이동하면서 중복 없이 가장 긴 구간을 찾는 방법이다. 1. 슬라이딩 윈도우와 두 포인터의 역할윈도우: 문자열에서 중복 없는 구간을 나타낸다.두 포인터 (start와 index): start는 현재 윈도우의 시작 위치, index는 현재 문자의 위치를 나타낸다.이 방법은 두 포인터를 이용해 윈도우의 크기를 조절하며 중복이 생길 때마다 시작 위치를 업데이트하는 방식으로 작동한다. 예시를 통해 이해하기입력: ".. 2024. 11. 9.
11장. 해시 테이블(4) - 예제(보석과 돌) 문제. 보석과 돌J는 보석이며, S는 갖고 있는 돌이다. S에는 보석이 몇 개나 있을까? 이때, 대소문자는 구분한다. 입력: J ="aA", S = "aAAbbbb"출력: 3   풀이1. 해시 테이블을 이용한 풀이이 문제는 S의 각 문자 빈도를 해시 테이블로 계산한 후, J의 각 문자에 해당하는 빈도 수를 더하는 방식으로 해결할 수 있다. S = "aAAbbbb"freqs = {}for char in S: if char not in freqs: freqs[char] = 1 else: freqs[char] +=1 freqs # {'a': 1, 'A': 2, 'b': 4}  S의 각 문자가 몇 번씩 등장하는지 세기 위해 해시 테이블을 생성한다.S의 문자를 순.. 2024. 11. 8.
728x90
반응형