티스토리 뷰

알고리즘

[프로그래머스] 의상

Redirect 2024. 3. 8. 17:43
728x90

해시 level 2 문제 입니다.

https://school.programmers.co.kr/learn/courses/30/lessons/42578?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

코니는 매일 다른 옷을 조합하여 입는것을 좋아합니다.

예를 들어 코니가 가진 옷이 아래와 같고, 오늘 코니가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야합니다.

  • 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 예를 들어 위 예시의 경우 동그란 안경과 검정 선글라스를 동시에 착용할 수는 없습니다.
  • 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.
  • 코니는 하루에 최소 한 개의 의상은 입습니다.

코니가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.

 

문제 접근

 

처음에 문제를 잘 못 이해하고 있어서 조금 고민했지만 입출력 예를 보고 좀 이해됐다. 그래서 글이 어렵게 적힌 쉬운 조합 문제라는 것을 알았고, 문제를 최대한 간단히 보려고 노력했다.

 

1. 의상의 이름은 모두 다르기 때문에 종류만 신경 쓰는 것이 좋다.

2. 의상을 하나만 착용해도 입은 것으로 간주되기 때문에 안입은 상황도 구하고 안입은 상황을 나중에 빼는 것이 쉬울 수도 있다.

 

 

내가 적은 답

이 문제는 운이 좋아서 한 번에 풀었다.

처음에 헤맸던 부분이 리스트로 입력된 의상 목록을 종류대로 dict에 담으려고 했는데 사실 이름을 신경쓸 필요 없다는 것을 깨닫고 문제를 최대한 간소화해서 해결할 수 있었다.

일단 각 의상 종류 별로 입은 경우와 안입은 경우를 모두 포함시켜서 조합으로 생각해서 경우의 수를 구했다.

그리고 마지막에 -1 을 함으로써, 모두 안입은 상황을 뺐다.

def solution(clothes):
    cloth = {}
    answer = 1
    for c in clothes:
        if c[1] not in cloth.keys():
            cloth[c[1]] =  1
        else:
            cloth[c[1]] =  cloth[c[1]]+1
    for l in cloth.values():
        answer = answer * (int(l)+1)

    return answer-1

 

 

728x90
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크