# itertools

55개의 포스트
post-thumbnail

[Python] 순열, 조합

Permutation 순열 : 순서가 있을 땐 combinations 사용 Combination 조합 : 순서가 없을 땐 combinations 사용 중복순열, 중복조합에 관한 모듈도 있는데, 그건 아직 필요한적이 없었다. product, combinationswithreplacement 이 두개인데, 나중에 사용하는 떄가 온다면 그 때 작성해도 될 것 같다.

2023년 9월 8일
·
0개의 댓글
·
post-thumbnail

python 맛보기 - 순열, 조합

목차 > 1. 순열 중복 순열 조합 중복 조합 순열(permutation) n개 중 r개를 선택하여 순서대로 정렬 eg) 1,2,3에서 2개를 선택 -> (1,2), (2,3), (3,1) 순서를 고려하기 때문에 (1,2) 와 (2,1)은 다른 것 공식: nPr = n! / (n-r)! itertools 순열 > permutation(list 이름, 몇개씩 뽑을건지) 해당 코드를 실행하면 (1,2), (1,3), (1,4), (2,1), (2,3), (2,4), (3,1), (3,2), (3,4), (4,1), (4,2), (4,3) 튜플 형식으로 반환한다. itertools 중복 순열 product(리스트 이름, repeat = 추출 개수) 조합 서로 다른

2023년 8월 19일
·
1개의 댓글
·

[Python] itertools 사용 주의 사항

itertools 패키지에는 에는 여러 유용한 클래스들이 있는데 itertools.combination을 사용하다가 지속적으로 내용물이 사라지는 경험을 했다. itertools.combination에 있는 내용물을 list로 받아온 뒤에 다시 이 내용물을 print 해보니 아무것도 없다는 것을 발견했기 때문이다. itertools 는 파이썬 이터레이터이고 파이썬 이터레이너는 한번 consume 한 뒤에는 다시 반복해서 꺼낼 수 없다. 이 경우 다시 사용하고 싶을 때에는 꺼낸 객체를 변수로 지정해두거나, 다시 이터레이터를 선언하는 것 뿐이다. 이터레이터를 꺼낸 후에 변수에 지정해두는 방법. arr = list(itertools.combinations([1,2,3],2)) combination이외에 다른 이터레이터들도 마찬가지다.

2023년 7월 28일
·
1개의 댓글
·

Python) Cycle

반복 가능한 요소를 원하는 만큼 반복시켜준다. 기본적인 사용방법. 다음은 cycle을 활용해서 두 리스트를 합치는 방법이다.

2023년 6월 28일
·
0개의 댓글
·

Python) itertools

combinations - 조합 자기 자신도 들어가야한다면 combinationswithreplacement(it,r) 사용하기 permutations - 순열 product - 데카르트 곱

2023년 6월 3일
·
0개의 댓글
·

순열과 조합

permutation(순열) 순서를 고려한 경우의 수 두 번째 인자 생략 가능 [('1', '2', '3'), ('1', '3', '2'), ('2', '1', '3'), ('2', '3', '1'), ('3', '1', '2'), ('3', '2', '1')] [('1', '2'), ('1', '3'), ('2', '1'), ('2', '3'), ('3', '1'), ('3', '2')] combination(조합) 순서를 고려하지 않은 경우의 수 두 번째 인자 생략 불가능 [('1', '2', '3')] [('1', '2'), ('1', '3'), ('2', '3')]

2023년 5월 11일
·
0개의 댓글
·
post-thumbnail

파이썬으로 코딩 문제 풀이 시 유용한 코딩 요령

map() 활용하기 map(function, iterable, ...) map()은 파이썬 내장함수이다. iterable의 모든 항목에 function을 적용한 후 그 결과를 산출하는(yielding) 이터레이터(map object)를 반환한다. map의 반환 값을 변수 여러 개에 저장하는 언패킹이 가능하다. function 인수에는 함수명만 쓴다. 코딩 문제 풀이에서 요구하는 입력 방식에 따라 다양하게 활용할 수 있다. 흔한 방식인 두 개의 정수를 빈칸으로 구분하여 입력 받아서 변수 a, b에 저장하기: a, b = map(int, input().split()) 위 코드는 input()으로 입력받은 값을 빈칸으로 구분하기 위해 split()을 써서 리스트로 만들고, 이 리스트의 모든 값을 int로 형변환 하여 맵 객체를 반환한다. 마지막으로 맵 객체가 변수 a, b에 언패킹되면서 저장된다. map()을 사용하면 여러 개의 입력을 한 줄로

2023년 5월 6일
·
0개의 댓글
·

python 누적합

2023년 4월 13일
·
0개의 댓글
·
post-thumbnail

[프로그래머스] 이모티콘 할인 행사 - Python3

문제 https://school.programmers.co.kr/learn/courses/30/lessons/150368 각 이모티콘에 10, 20, 30, 40 프로의 할인율을 적용할 수 있고, 유저의 [구매 기준 할인율, 가입 기준 가격] 리스트와 이모티콘의 가격 리스트가 주어질 때, 이모티콘 플러스 가입자가 가장 높은 경우 중 이모티콘 판매 매출이 가장 높은 경우의 [가입자 수, 매출]을 반환하는 문제 알고리즘 분류 - 완전 탐색, 중복 조합 난이도 - Level 2 소요 시간 - 20~30분 관련 개념 중복 순열 - product() 접근 방법 할인율을 리스트로 만들어 이모티콘 별 할인율에 대한 중복조합을 구한 후, 완전탐색으로 중복조합의 각 경우에 대

2023년 2월 26일
·
0개의 댓글
·

[파이썬] 프로그래머스 LV1 두개 뽑아서 더하기

프로그래머스 두개 뽑아서 더하기 삼총사를 복습할 수 있엇던 문제였다. 첫시도 성능 고민 없이 해보았는데 나온 결과가 시간이 너무 걸려서 이건 아닌 것 같음.. 이런 방식은 LV0 100문제를 풀 때 주로 사용했는데 LV0에선 리스트를 이용해서 성능 고민 없이 우선 해결 + 파이썬 적용이 목표였었다 dictionary 이용 딕셔너리에 넣는 과정에서 중복되는 값은 제외되게 된다. 다른 사람의 풀이 itertools 에서 combinations를 import하지 않고 for-loop 으로 조합을 만들어주는 풀이이다. 그런데 제일 우수한 성능을 보여줌. 👉 2개를 뽑아서 만드는 조합은 for-loop으로만 하는게 나을 것 같음 성능 비교 테스트 1 〉 통과 (0.00ms, 9.89MB) 통과 (0.01ms, 10.1M

2023년 2월 5일
·
0개의 댓글
·

[파이썬] 프로그래머스 Lv1. 삼총사

프로그래머스 삼총사.. 푸는데 너무 복잡하게 생각해서 시간도 너무 쓰고 문제를 다 맞추지도 못함..🥲 이 레벨에서 시간이 너무 오래걸리고 조건문을 너무 자주 쓰게 된다면 잘못 되어 가고 있다는 걸로 이해해도 될듯 하다. 어쨌든 조건을 너무 잘게 쪼개서 그 사이 사이로 빠져나간 값들이 많은 것으로 예상됨.. > 이 문제는 정수 3개씩 그룹으로 묶어서 그 합이 0일 경우를 카운트 해서 리턴하면 된다. 즉 조합을 사용하라는 건데... 조합은 python itertools에서 제공이 된다. 총 3가지 이터레이터(무한 이터레이터, 가장 짧은 입력 시퀀스에서 종료되는 이터레이터, 조합형 이터레이터)가 소개되었는데, 그중 조합형 이터레이터에 컴비네이션이 있다. <조합

2023년 2월 3일
·
0개의 댓글
·

[프로그래머스] 이모티콘 할인행사

https://school.programmers.co.kr/learn/courses/30/lessons/150368 1. 코드 2. 후기 1 ≤ emoticons의 길이 = m ≤ 7 1 ≤ users의 길이 = n ≤ 100 행사 목적을 최대한으로 달성했을 때의... 위의 조건들을 보고 중복 순열을 사용해도 된다는 판단을 했다. 특히 3번 조건의 설명처럼 최대한 이라는 키워드를 보면 모든 경우를 탐색하는 편이 좋다. 본인은 중복순열 대신 dfs함수를 정의하여 모든 경우를 구했다. 중복순열을 사용한 풀이는 아래 코드를 참조

2023년 1월 15일
·
0개의 댓글
·

표준 라이브러리

: itertools, heapq, bisect, collections, math 💡 파이썬 공식 문서 |라이브러리|설명 |--------|:-------------------- |내장 함수|기본 입출력 기능부터 정렬 기능(sorted())을 포함하고 있는 기본 내장 라이브러리 |itertools|반복되는 형태의 데이터 처리하는 기능을 제공하는 라이브러리순열과 조합 라이브러리 제공 |heapq| 우선순위 큐 구현에 사용 |bisect| 이진 탐색 기능 제공 |collections| deque, Counter 등의 자료구조 포함하는 라이브러리 |math|필수적인 수학적 기능 제공 내장 함수 Built-in functions import 명령어 없이 사용 가능 input(), print(), sum(), min(), max(), eval(), sorted(), s

2023년 1월 11일
·
0개의 댓글
·
post-thumbnail

파이썬 중급2

해당 글은 제로베이스데이터스쿨 학습자료를 참고하여 작성되었습니다 📌자주 사용하는 외부모듈 📌수학관련 내장 함수 📝입력 🧾출력 📌math 모듈 📝입력 🧾출력 📌time, datetime 모듈 📝입력 🧾출력 📌 random 모듈 📝입력 🧾출력 📌 statistics 모듈 📝입력 🧾출력 📌 itertools 모듈 📝입력 🧾출력 📌파이썬 문서 >- https://docs.python.org/ko/3/

2023년 1월 9일
·
0개의 댓글
·

프로그래머스 - 옹알이(1)

1. 문제 설명 머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요. 2. 제한 사항 1 ≤ babbling의 길이 ≤ 100 1 ≤ babbling[i]의 길이 ≤ 15 babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다. 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다. 문자열은 알파벳 소문자로만 이루어져 있습니다. 3. 입출력 예 ![](https://velog.velcdn.com/images/hdj0829/post/131

2023년 1월 2일
·
0개의 댓글
·

Combination(조합) & Permutation(순열)

Combination : 어떤 쌍(pair)를 return 하고 싶을때 combination을 활용하면 쉽게 구할 수 있다. 즉 (A,B)와 (B,A)는 같은 것으로 취급 Syntax > Permutation : (A,B)와 (B,A)는 다른 것으로 취급 Syntax >

2022년 12월 28일
·
0개의 댓글
·

[프로그래머스] 교점에 별 만들기

Ax + By + C = 0으로 표현할 수 있는 n개의 직선이 주어질 때, 이 직선의 교점 중 정수 좌표에 별을 그리려 합니다. 별이 그려진 부분은 *, 빈 공간(격자선이 교차하는 지점)은 .으로 표현하면 다음과 같습니다. "..........." ".....*....." "..........." "..........." "........." "..........." "..........." "..........." "..........." "........." "..........." 이때 격자판은 무한히 넓으니 모든 별을 포함하는 최소한의 크기만 나타내면 됩니다. 따라서 정답은 "....*...." "........." "........." "......." "........." "........." "........." "........." "......." 입니다. 직선 A, B,

2022년 11월 1일
·
0개의 댓글
·
post-thumbnail

리트코드_46, 77_permutations와 combinations_Medium (itertools 안쓰고 직접 구현 방법_deepcopy (뼈대 매우 중요))

결론부터 작성 코테에선 itertools를 사용하고 + 주석에 "구현의 효율성, 성능을 위해 사용했다" 는 내용을 달면 금상첨화 라이브코딩에선 직접 구현해봐라 시킬 수 있다. 삼성코테에서 itertools를 사용할 수 없다는 썰이 있다. Combinations(리스트, 넘버) - 그리고 이 코드는 이해가 쉽게 하려고 dfs를 비효율적으로 작성한거(조합만) 다음에 효율좋은 제대로된 코드로 추가 정리하고 그걸 외우자 Permutations(리스트, 넘버) dfs 기반 if 리프 노드일 때 결과 추가 순열 생성 재귀 호출 (루트->인터널 이동하며 path기록) 앞에서부터 슬라이싱하여 모든 경우의 수에 대한 dfs deepcopy를 이용해 복사 중요 e에 대해 한번씩 다 빼볼거기 때문에 remove사용 ([2,3], [1,3],

2022년 10월 5일
·
0개의 댓글
·
post-thumbnail

[프로그래머스-레벨2]모음사전 - python

https://school.programmers.co.kr/learn/courses/30/lessons/84512 문제 설명 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다. 단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요. 제한사항 word의 길이는 1 이상 5 이하입니다. word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다. 입출력 예 word| result -|- "AAAAE"| 6 "AAAE"| 10 "I" |1563 "EIO" |1189 입출력 예 설명 입출력 예 #1 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA", "AAA", "A

2022년 9월 27일
·
0개의 댓글
·
post-thumbnail

[프로그래머스] Lv.2 모음사전 (Python)

📍문제 [프로그래머스] Lv.2 모음사전 📍풀이 사실 이거 순열, 조합 이용하는 것 같아서 itertools라이브러리 먼저 찾아봄.. 모든 조합을 만든 다음 사전에 저장하고 이를 오름차순 정렬했다. AAA같은 단어가 있으니까 중복순열을 이용했다. 💻나의 코드 for문 안을 분석하자면 > 1. product(['A', 'E', 'I', 'O', 'U'], repeat = i)로 중복순열을 생성한다. 단어 1개씩 모든 조합, 2개씩 모든 조합 ... 5개씩 모든 조합 이를 join해주고 리스트에 담아준다. append를 하게되면 리스트 안에 리스트가 추가되니까 extend로 확장 그러면 모든 경우의 수가 담긴 아직 정렬은 되지 않은 사전이 완성된다. 이를 오름차순으로 정렬해주면 리얼 사전 완성! 그게

2022년 9월 27일
·
0개의 댓글
·