Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

발전하는 개발자가 되자

프로그래머스 알고리즘: 위장(java) 본문

개발공부/알고리즘

프로그래머스 알고리즘: 위장(java)

백경훈 2019. 2. 9. 20:21

프로그래머스 알고리즘 (java)

위장

프로그래머스 (위장)

내가 작성한 코드

set 으로 카탈로그를 뽑아내고 카탈로그별 숫자를 구해 각각 곱해줘 경우의 수를 구했다.

  • set을 안쓰고 리스트를 써도 될 것 같다.
public class Camouflage {
    public int solution(String[][] clothes) {
        int answer = 1;
        Set<Category> category = new HashSet<>();

        for (String[] clothe : clothes) {
            //카태고리가 없으면 카태고리 생성
            if (!category.contains(new Category(clothe[1]))) {
                category.add(new Category(clothe[1]));
            } else {
                // 있으면 그 카태고리를 찾아 값 증가
                for (Category category1 : category) {
                    category1.add(clothe[1]);
                }
            }
        }

        // 안뽑는 경우의 수를 생각해 +1
        for (Category category1 : category) {
            answer *= (category1.getSize() + 1);
        }
        // 아무것도 안뽑은 경우가 포함된 것 이므로 -1;
        return answer - 1;
    }
// 객체로 뽑아냄 굳이 안써도 될듯
    public class Category {
        private String caegory;
        private int size = 1;

        public Category(String caegory) {
            this.caegory = caegory;
        }

        public void add(String caegory) {
            if (this.caegory.equals(caegory)) {
                size++;
            }
        }

        public int getSize() {
            return size;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Category category = (Category) o;
            return Objects.equals(caegory, category.caegory);
        }

        @Override
        public int hashCode() {
            return Objects.hash(caegory);
        }
    }
}

다른 사람들의 풀이 중 참고할 점

내가 생각한대로 set을 안써도 됬다.
해쉬인데 왜 set을 쓰려했을까...
그냥 맵을 사용하고 맵의 value 값을 증가시켜주면 됬는데... 바보같이 푼거 같다.

참고한 후 다시 푼 코드

public int solution2(String[][] clothes) {
        int answer = 1;
        Map<String, Integer> list = new HashMap<>();
        for (String[] clothe : clothes) {
            if (!list.containsKey(clothe[1])) {
                list.put(clothe[1],1);
            } else {
                list.put(clothe[1],list.get(clothe[1])+1);
            }
        }

        for (Integer value : list.values()) {
            answer *= (value + 1);
        }
        return answer - 1;
    }


Comments