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
- DP
- 해시해킹
- 재귀
- 1781
- 브루트포스
- 스택
- 재귀함수
- 동적프로그래밍
- 그리디
- 26008
- 4811
- BOJ14889
- Crossfit
- Flutter
- C++
- 서울에서경산까지
- dart
- D1
- BOJ
- spring boot
- 삼성
- 14863
- sw expert academy
- 크로스핏
- 15662
- 1로만들기2
- Python
- 회전하는큐
- 15353
- 백준
Archives
- Today
- Total
곧죽어도 콛잉
[프로그래머스 / Python] 의상 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이거는 수학적 지식이 필요하다.
인풋아웃풋 예시를 읽어보면,
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
이럴때, headgear의 경우 2가지, eyewear 1가지 해서 총 2*1 가지의 경우의 수가 나온다.
그런데 꼭 2가지 다 쓸필요는 없으니, headgear를 안쓰는경우를 추가해서 headgear 3가지, eyewear를 안쓰는 경우를 추가해서 eyewear 2가지, 총 3*2 가지의 경우의 수가 나온다.
이렇게 계산한 경우 headgear, eyewear 모두 안쓰는 경우의 수도 포함되므로 1가지를 빼줘서 총 5가지라고 할 수 있다.
def solution(clothes):
answer = 1
dic = {}
for i in clothes:
if dic.get(i[1]) :
dic[i[1]].append(i[0])
else :
dic[i[1]] = [i[0]]
for k in dic:
answer *= (len(dic[k])+1)
return answer-1
다른 코드를 보면 reduce 함수와 Counter로 위 과정을 간략하게 표현할수도 있다
def solution(clothes):
from collections import Counter
from functools import reduce
cnt = Counter([kind for name, kind in clothes])
answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
return answer
'Coding Test > Python' 카테고리의 다른 글
[프로그래머스 / Python] 프로세스 (1) | 2024.02.27 |
---|---|
[BOJ 1158 / Python] 요세푸스 문제 (0) | 2024.02.27 |
[BOJ 26008 / Python] 해시해킹 (0) | 2024.02.26 |
[프로그래머스 / Python] 나누어 떨어지는 숫자 배열 (0) | 2024.02.21 |
[BOJ 10818 / Python] 최소, 최대 (0) | 2024.02.21 |
Comments