자바/프로그래머스

[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의 값을 얻을 수 있음.