Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 알고리즘
- Vue
- GitHub
- mybatis
- jquery
- aws
- kotlin
- db
- Spring
- 스프링
- 방법
- Eclipse
- JPA
- 에러
- oracle
- 함수
- 코틀린
- 생성
- Security
- 넥사크로
- 오라클
- Java
- IntelliJ
- JavaScript
- 시큐리티
- error
- Git
- 쿼리
- 자바
- 프로그래머스
Archives
- Today
- Total
송민준의 개발노트
프로그래머스-level2-위장 본문
https://programmers.co.kr/learn/courses/30/lessons/42578
해시를 이용해 접근하는 방식이다.
종류는 Key, 이름은 value로 하여 종류 갯수만큼 value를 더하였다.
즉, HashMap<String, Integer> 형태인 것이다.
코드를 통해 알아보자.
먼저 for문으로 1차원 배열 clothe에 2차원 배열 clothes를 담는다.
그리고 해쉬맵에 값을 담는다. 키값에는 종류가 들어가고(인덱스 1) value에는 getOrDefault를 사용하여 키값이 없으면 0을 주고 키값이 있으면 그 키값의 값을 가져온다. 그리고 +1을 해준다. ( 카운팅해주는 개념이라 보면됨)
다음으로 경우의 수를 따져 값을 반환해야 하는데...
예를 들어 종류가 3가지이고 각각 (2, 1, 3) 이라는 값들을 가지고 있다.
그럼 경우의 수는 다음과 같다. (보기 좋게 괄호로 구분하였음.)
(2+1+3) + ((2*1) + (1*3) + (2*3)) + (2*1*3)
이 경우 확률과 통계에서 사용하는 경우의 수 공식이있다.
위에서 내가 말한 3가지 A, B, C (2, 1, 3)이 있으면 다음과 같다.
(A+1) * (B+1) * (C+1) -1
여기서 -1을 해주는 아무것도 선택 안한 경우의 수를 빼준 것이다.
이를 코드로 표현 한게
int answer = 1;
for (int value : map.values()) {
answer *= (value + 1);
}
answer -=1;
answer을 초기화 해야 하기 때문이 1이 와야한다.(곱해야 하기 때문에 0이 아닌 1)
그리고 map.values()로 값들을 가져오고 answer에 곱해준다.
마지막 -1까지 해주면 끝...!
공식적용이 안되면 코드가 꽤 길어질듯하다...
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스-level2-멀쩡한 사각형 (0) | 2019.12.01 |
---|---|
프로그래머스-level2-프린터 (0) | 2019.12.01 |
프로그래머스-level2-주식가격 (0) | 2019.11.26 |
프로그래머스-level2-탑 (0) | 2019.11.26 |
프로그래머스-level1-직사각형 별찍기 (0) | 2019.11.21 |