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
반응형