일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- 서버간 복사
- AWS Crawler
- 실행엔진
- 지연연산
- 문맥교환
- 프로그래머스 큰 수 만들기
- 데이터베이스복사
- 하둡에코시스템
- ORACLE MSSQL차이
- 데이터엔지니어링
- 데이터 수집
- lazy evaluation
- Catalyst Optimizer
- ORACLE문법
- Spark
- 하둡2.0
- 카프카
- freenom
- 하둡
- 하둡1.0
- 프로그래머스힙
- kafka 설치
- 런타임데이터영역
- 스파크
- 데이터파이프라인
- 빌드도구
- Databricks
- EMR 구조
- Spark 최적화
- Today
- Total
띵유로그
[프로그래머스][해시][위장] 본문
파이썬에 아직 익숙하지 않아 다 풀어놓고 잠시 헤메었다.
set생성시 변수명을 set으로 두니 local variable 'set' referenced before assignment 오류가 발생했다.
( set=set() )
파이썬 콘솔(파이썬3.7.1)에서는 해당 오류가 발생하지 않는데 프로그래머스에서 실행하면 발생한다.
변수명을 다르게 설정하니 문제가 해결된것으로 보아 특정 단어를 미리 예약해둔 모양인데 확인해봐야겠다.
여튼,,, 내 풀이는 아래와 같다.
def solution(clothes):
answer=1
dict_ ={}
c_list=set()
for i in range(len(clothes)):
if clothes[i][1] in dict_.keys():
dict_[clothes[i][1]]=dict_[clothes[i][1]]+1
c_list.add(clothes[i][1])
else:
c_list.add(clothes[i][1])
dict_[clothes[i][1]]=1
for i in c_list:
answer=answer*(dict_[i]+1)
answer=answer-1
return answer
얼른 파이썬에 익숙해져서 짧고 간결한 코드를 짜보고싶다..ㅎㅎ
내가 푼 방법의 핵심은 조합이다.
의상 종류별로 개수를 구한 후 모두 곱하면 선택할 수 있는 가지수가 나온다.
이때 어떤 의상는 선택하지 않을 수도 있으므로 '선택하지 않는다'는 선택지가 늘어난다.
예를들어 상의가 총 2개라면 상의를 선택하지 않을 가지수를 포함해야한다. 즉 상의의 가지수는 3이 된다.
이렇게 종류별로 +1씩하여 곱한 후 -1을 해준다.(모두 선택하지 않을 때는 제외)
다른사람 풀이)
1. counter 에 대해서 새로 알았다.
리스트에서 각 원소의 개수를 직접 세지 않아도 counter 로 생성하기만 하면 바로 딕셔너리 형태로 개수가 반환된다....!!
update 함수를 통해 기존에 세던것에서 계속 이어나갈 수도 있고 most_common값도 구할 수 있다. 신세계.
내가 쓴 첫번째 for문은 아래 코드로 간단하게 표현가능하다.
Counter([kind for name, kind in clothes])
2. reduce로 연속적인 계산 가능
https://www.daleseo.com/python-functools-reduce/
'알고리즘' 카테고리의 다른 글
[프로그래머스][큐][프린터] (0) | 2020.08.23 |
---|---|
[프로그래머스][스택][기능개발] (0) | 2020.08.16 |
[백준1874] 스택 수열 (0) | 2019.08.03 |
[백준 11047] 동전 0 (0) | 2019.07.30 |
[백준 11054] 가장 긴 바이토닉 부분 수열 (0) | 2019.07.29 |