IT/프로그래머스
[프로그래머스] 해시 > 위장(Python)
ziasu
2021. 10. 14. 20:16
반응형
1. 생각정리
- clothes 2차원 배열에는 (종류, 이름) 형식으로 스파이가 가지고 있는 옷에 대한 정보가 저장되어 있음
- 만들어질 수 있는 옷의 조합은 (각 종류별로 옷 종류+1을 다 곱한 값 -1)
2. 96.4/100 코드
- set란 2차원 리스트에 옷에 대한 정보들을 저장
- 1행에는 옷의 종류들을 다 저장
- 2행부터는 (2행->1행 1열 옷 종류의 옷 이름, 3행->1행 2열 옷 종류의 옷 이름...) 이런 느낌으로 저장
- 정답을 도출할 때는 2행부터 끝까지 훑으며 각 행의 리스트 길이를 활용하여 계산
- 근데 내가 코드를 작성하고도 다소 복잡하다는 느낌이 들었음
def solution(clothes):
set = [[] for _ in range(30)] #1행에는 옷의 유형, 2행부터는 옷의 종류를 유형에 맞게 저장
for i in range(len(clothes)):
if clothes[i][1] not in set[0]:
set[0].append(clothes[i][1])
set[set[0].index(clothes[i][1])+1].append(clothes[i][0])
else:
set[set[0].index(clothes[i][1])+1].append(clothes[i][0])
answer = 1
for i in set[1:]:
if len(i)==0:
continue
else:
answer = answer * (len(i)+1)
return answer-1
3. 성공 코드
- dictionary를 활용하면 좀 더 정보를 깔끔하게 관리할 수 있을 것 같았다.
- 전체 clothes 배열을 for문으로 훑으며 처음 보이는 옷의 종류에 대해서는 '옷의 종류: 1' 이렇게 추가해주고, 이미 저장되어 있는 종류에 대해서는 value값에 1을 더해주는 식으로(같은 이름을 가진 의상이 존재하지 않으므로 가능)
def solution(clothes):
answer = {}
for i in clothes:
if i[1] in answer:
answer[i[1]] +=1
else:
answer[i[1]] = 1
result = 1
for i in answer.values():
result = result * (i+1)
return result-1
반응형