반응형
사이트명 : 프로그래머스(Programmers)
문제명 : 위장
언어 : 자바(Java)
위장 문제에서 포인트는
옷 종류는 여러개인데 하나씩 입어도 되긴 하는데
하나도 입지 않을 수는 없을 때
공식이 어떻게 되지?
난 수학시간에 취미가 자는거라
이게 굉장히 어렵더라
어쨌든 내 풀이방법은 아래와 같은데
일단 옷 종류에 따른 모든 경우의 수 구하는 공식은(옷 안입는 것 까지)
( 옷 종류별 합계 + 1 ) * ( 옷 종류별 합계 + 1 ) ... 옷 종류에 따라 계속 추가
이렇게 하는데
여기서 아무것도 선택하지 않는 경우는 해당이 안되므로
답에서 -1을 해주면 된다
map을 사용해 옷 이름이 무엇인지는 상관없이 옷 유형만 같으면
기존 값에 +1 해주는 식으로 사용한다
이후 list에 옷 종류별 합계를 차례대로 넣어준 뒤
위에 적은 (옷 종류별 합계 + 1) * (옷 종류별 합계 +1) 을 해 주고
마지막에 -1을 해서 반환한다
마지막으로 프로그래머스에 바로 적용할 수 있는 코드는 아래와 같다
import java.util.ArrayList;
import java.util.HashMap;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
int incre = 0;
ArrayList<Integer> list = new ArrayList<>();
HashMap<String, Integer> map = new HashMap<>();
for(int i = 0; i<clothes.length; i++) {
if(map.get(clothes[i][1]) != null) { //
incre = map.get(clothes[i][1]) + 1;
} else {
incre = 1;
}
map.put(clothes[i][1], incre);
}
for( String key : map.keySet() ){
list.add(map.get(key));
}
for(int i = 0; i<list.size(); i++) {
answer = answer * (list.get(i) + 1); // 모든 경우의 수
if(i == list.size() - 1) { // 아무것도 선택하지 않는 경우 제외
answer = answer - 1;
}
}
return answer;
}
}
반응형
'Language > 알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 최댓값과 최솟값(Java) (0) | 2019.09.19 |
---|---|
프로그래머스 영어 끝말잇기(Java) (0) | 2019.09.18 |
프로그래머스 전화번호 목록(Java) (0) | 2019.09.17 |
프로그래머스 숫자의 표현(Java) (0) | 2019.09.17 |
프로그래머스 최솟값 만들기(Java) (0) | 2019.09.17 |
댓글