Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 피보나치수열
- topdown
- dynamicProgramming
- 주석
- 탑다운
- 디피
- fibo
- 오픽노잼
- 이진탐색 #나무 자르기
- 안드로이드
- XML주석
- 영어회화
- 바텀업
- 오픽점수잘받는방법
- 오픽
- XML
- English
- 오픽공부법
- 메모이제이션
- 오픽노잼공부방법
- 다이나믹프로그래밍
- 오픽가격
- stack 스택
- 이진탐색
- 영어말하기
- opic
- ㅂ
- dp
- 안드로이드주석
Archives
RUBY
[프로그래머스] 위장 본문
출처:: programmers.co.kr/learn/courses/30/lessons/42578?language=python3
분류:: 해시
1. 문제 이해 및 해결과정
1) 해시
1. dict= {'옷의 종류' : '옷1','옷2' } 형태로 담는다 2. 경우의 수는 [각 종류별로 있는 옷의 수 + 1 (그 옷을 선택하지 않는 경우) ] 를 각 종류 마다 곱해주고 모두 선택되지 않는 경우는 없으므로 -1을 해준다 -> 모자 종류:2 목거리:3 상의:4 라고 가정하면, ( 2+1 ) * ( 3 + 1) * ( 4 +1 ) = 3*4*5 - 1(모두선택하지않을 때) 로 계산하면 된다 |
2. 풀이방법
1. [python] 해시
- dict => 옷의 종류 : 옷 1, 옷2
def solution(clothes):
dict={}
result=1 #가능한 옷 조합 수
#옷의 종류별로 옷 이름을 담는다
for cloth,kind in clothes:
if kind in dict:#이미 있는 종류라면
dict[kind].append(cloth)
else:#처음 나오는 종류라면
dict[kind]=[cloth] #[]로 감싸서 넣어야 한다
for kind in dict.keys(): #가능한 옷의 조합 수
result= result*(len(dict[kind])+1)
result-=1
return result
2. [python] 해시
- 1번 풀이에 처음부터 종류별 개수를 만들어 놓는 경우
- dict => 옷의 종류별 개수
def solution(clothes):
cnt={} #옷의 종류별로 개수를 담는 딕셔너리
result=1
for cloth,kind in clothes:
if kind in cnt: #이미 있는 종류라면
cnt[kind]+=1
else: #처음 나오는 종류인 경우
cnt[kind]=1
for x in cnt.values(): # 종류별로 개수에 선택하지 않을 경우(1)을 더해서 곱한다
result*=(x+1)
result-=1 #아무것도 선택하지 않는 경우
return result
3. [python] reduce 함수 이용
from collections import Counter #리스트 값을 딕셔너리 형태로 반환
from functools import reduce
def solution(clothes):
cnt = Counter([kind for name, kind in clothes]) #종류의 개수를 딕셔너리 형태로 저장
result=reduce(lambda x,y : x*(y+1),cnt.values(),1)-1 #입력받은 타입을 지정한 함수에 따라 계산하고 단일값으로 반환한다
return result
3. 오답원인
-딕셔너리는 [] 형태로 넣어야한다 dict[key]=value 로 넣으면 안된다
dict[key]=[value]
4. 알게된 점
dict() : 딕셔너리 이용하기
dict[key] = value
- 위의 코드는 같은 key에 value가 중복되면 그 key에 새로운 value가 추가되는 것이 아니라 덮어씌어진다
1. 처음 나오는 키라면
dict[key]=[value] #틀을 만들어 주고
2. 이미 key가 존재한다면
dict[key].append(value)
reduce(함수, 순서형 자료, 초기값)
from functools import reduce
reduce(lambda x,y : x+y,[1,2,3,4,5])
#((((1+2)+3)+4)+5) => 15
reduce(함수 or lambda함수 , 순서형자료, [초기값] )
'PS > Programmers' 카테고리의 다른 글
[프로그래머스] 카펫 (0) | 2020.10.24 |
---|---|
[프로그래머스] 쿼드압축 후 개수 세기 (0) | 2020.10.24 |
[프로그래머스] 가장 큰 정사각형 찾기 (0) | 2020.10.23 |
[프로그래머스] 전화번호 목록 (0) | 2020.10.22 |
[프로그래머스] H-Index (1) | 2020.10.22 |
Comments