자바/프로그래머스
[Programmers/JAVA] 위장
2가
2023. 2. 14. 21:21
내 코드
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 0;
//hashset을 이용하여 중복업이 list에 옷 종류만 담기
HashSet<String> set=new HashSet<String>();
List<String> clothes_subject=new ArrayList<String>();
for(int i=0; i<clothes.length; i++) {
if(set.add(clothes[i][1])) {
clothes_subject.add(clothes[i][1]);
}
}
//옷 종류별로 갯수 세기
int[] count= new int[clothes_subject.size()];
int index=0;
for(String list_sub:clothes_subject) {
for(int i=0; i<clothes.length; i++) {
if(list_sub.equals(clothes[i][1])) {
count[index]++;
}
}
index++;
}
//(x+a)(x+b)(x+c)...인 공식을 이용해 계산. x에 1을 대입.
int sum=1;
for(int i=0; i<count.length; i++) {
sum=sum*(1+count[i]);
}
//1을 대입한 x값을 하나 빼줌.
answer=sum-1;
return answer;
}
}
느낀점
역시 사람은 발전한다. 저번에 배웠던 hashset을 이용하여 문제를 풀었다. 너무 뿌듯하다..!
하지만 아직 어리숙한듯. List를 사용안하고 푸는 방법도 있었다. 더 발전하자!
갯수를 구하다보니 공식이 있겠다는 생각은 들었지만 어떤 공식인지 도저히 감이 안잡혔다... 결국 공식구하는건 힌트를 봤지만 그거빼고는 모두 내 노력으로 짰다. 발전한 나의 모습을 볼 수 있어 행복한 하루다.
참고)
옷의 종류가 두 종류일 때 : a, b
answer은 "a+b+(ab)"가 나옴.
옷의 종류가 세 종류일 때 : a, b, c
answer은 "a+b+c+ (ab+ac+bc)+(abc)"가 나옴.
(x+a)(x+b)=x^2+ (a+b)x + ab
(x+a)(x+b)(x+c)=x^3+ (a+b+c)x^2 + (ab+ac+bc)x + abc
=> 계수와 같다는 것을 알 수 있음. x에 1을 대입하면 answer+1의 값을 얻을 수 있음.