[프로그래머스] level2 : 의상

profile
마릴린벅시
2023. 6. 25. 10:45알고리즘

1. 문제 설명

 

2. 문제 해석

2차원 배열로 들어오는 값을 key-value쌍으로 만들어주어야 한다. 문제에서 각 행은 [의상의 이름, 의상의 종류]로 이루어져있다고 했기 때문에 의상의 종류별로 의상을 묶어주어야 풀 수 있을 것 같았다.

1. input의 배열 길이 만큼 loop를 돌며 transformedInput형태의 오브젝트를 만들어준다.

2. 이제 옷의 종류별로 몇 개의 아이템이 있는지 알 수 있게 되었으니, 옷의 가능한 조합 갯수를 구해준다.

3.  그럼 아래와 같은 조합이 나온다는 것을 알 수 있다. 이걸 계산 식으로 나타내면 headgear.length * eyewear.length = 2 인 것을 알 수 있다. 하지만 이 input값을 받았을 때의 답은 2가 아닌 5다.

(같은 카테고리의 옷 끼리는 매치할 수 없으므로, 카테고리가 다른 것들 끼리 매치해준다)

4. 왜냐하면 꼭 아이템을 다른 카테고리의 아이템과 매치할 필요는 없고, 한 카테고리의 옷만 걸칠 수도 있기 때문이다.

 

5. 이것을 계산 식으로 만드려면, 각 카테고리의 length에 1을 더해주어야 한다. 

headgear.length + 1에서 이 1은 headgear는 안 입고 eyewear만 입었을 때의 경우의 수를 하나 더 더해주는 것이다.

이렇게 다른 카테고리에도, 해당 카테고리의 옷을 입지 않고 다른 카테고리의 옷만 입었을 경우의 수를 1씩 더해준다.

(headgear.length + 1) * (eyewear.length + 1) = 6

그런데 정답인 5와 값이 다르다. 그 이유는 headgear를 안 입었을 때의 경우와 eyewear를 안 입었을 때의 경우를 모두 더해주었더니

아무것도 안 입었을 때의 경우의 수 까지 추가되었기 때문이다.

문제에서 하루 최소 한 개의 의상은 입는다. 라고 명시되어 있기 때문에

마지막에 아무것도 안 입었을 때의 경우의 수인 1을 빼준다.

 

 

3. 문제 풀이

 

 

 

프로그래머스

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

programmers.co.kr

 

반응형