• [프로그래머스] 해시 > 위장(Python)

    2021. 10. 14.

    by. ziasu

    반응형

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

    'IT > 프로그래머스' 카테고리의 다른 글

    [프로그래머스] 해시 > 완주하지 못한 선수  (0) 2021.10.14

    댓글