[프로그래머스][Level2][Java] 위장

2022. 5. 17. 00:14·프로그래머스/Level 2

문제

문제가 너무 길어서 링크를 따로 걸겠다.

https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

내 풀이 코드

public int solution(String[][] clothes) {      //위장
    int answer = 1;
    Map<String, Integer> m = new HashMap<>();   //부위별로 옷의 갯수를 저장할 HashMap을 생성
    for (int i = 0; i < clothes.length; i++) {  //부위별로 옷의 갯수를 HashMap에 저장
        m.put(clothes[i][1],m.getOrDefault(clothes[i][1],0)+1);
    }
    for(String x : m.keySet()){ //부위별로 옷의 갯수 +1을 한 값을 다 곱한다.
        answer *= m.get(x)+1;
    }
    return answer-1;            //답에서 1을 뺸다.
}

우선 이 문제는 설명이 아주 조금 복잡하게 되어 있어서 그렇지 이해만 하면 아주 쉬운 문제이다.

 

간단히 말해서 옷을 부위 별로 입을 수도 있고 안 입을 수도 있는데, 옷을 다 벗고 다니지는 않는 조건에서

옷을 입고 다니는 종류를 구하는 문제이다.

그래서 이 문제는 경우의 수로 풀면 간단히 풀 수가 있다.

여기 문제의 예시에서

얼굴에 입을 수 있는 옷의 종류는

동그란 안경, 검정 선글라스, 없음 -> 이렇게 3가지 경우가 있고

상의에 입을 수 있는 옷의 종류는

파란색 티셔츠, 없음 -> 이렇게 2가지 경우가 있다.

그래서 얼굴과 상의만으로 옷을 입을 수 있는 종류의 갯수는 3x2인데 여기서 아무것도 안입는 경우의 수는 제외하면 -1이 되어 5가 된다.

이런 식으로 얼굴, 상의, 하의, 겉옷으로 옷을 입으려면 3x2x2x2 - 1으로 23가지 경우의 수가 나온다.

 

이 원리를 이용해서 코드를 짜보면

clothes[][]배열에서 clothes[?][0]에는 어떤 옷인지가 담겨져 있고, clothes[?][1]에는 어떤 종류의 옷인지가 담겨져있는데

HashMap을 이용해서 key값에 옷의 종류를 넣고 value값에 그 옷의 종류의 갯수를 넣는다.

Map<String, Integer> m = new HashMap<>();   //부위별로 옷의 갯수를 저장할 HashMap을 생성
for (int i = 0; i < clothes.length; i++) {  //부위별로 옷의 갯수를 HashMap에 저장
    m.put(clothes[i][1],m.getOrDefault(clothes[i][1],0)+1);
}

근데 여기서 이미 key값이 존재할 수도 있으니 getOrDefault를 사용해서 이미 존재하면 그 value값에 1을 더하는 식으로 value값을 설정해준다.

 

for(String x : m.keySet()){ //부위별로 옷의 갯수 +1을 한 값을 다 곱한다.
    answer *= m.get(x)+1;
}

여기서는 각 key의 value값을 다 곱해서 answer에 넣어주는 것이고 마지막에 return에 -1을 해주면 쉽게 코드를 짜서 답을 구할 수 있다.

저작자표시 비영리 (새창열림)

'프로그래머스 > Level 2' 카테고리의 다른 글

[프로그래머스][Level2][Java] 모음사전  (0) 2022.05.22
[프로그래머스][Level2][Java] 괄호 변환  (0) 2022.05.17
[프로그래머스][Level2][Java] 튜플  (0) 2022.04.14
[프로그래머스][Level2][Java] 짝지어 제거하기  (0) 2022.04.14
[프로그래머스][Level2][Java] 점프와 순간이동  (0) 2022.04.08
'프로그래머스/Level 2' 카테고리의 다른 글
  • [프로그래머스][Level2][Java] 모음사전
  • [프로그래머스][Level2][Java] 괄호 변환
  • [프로그래머스][Level2][Java] 튜플
  • [프로그래머스][Level2][Java] 짝지어 제거하기
BvrPark
BvrPark
코드 퍼즐과 개발 일상
  • BvrPark
    비버의 개발 일지
    BvrPark
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • JAVA (7)
        • 메서드 외울 것 (2)
      • 프로그래머스 (56)
        • 총 풀이 코드(깃허브) (1)
        • Level 1 (22)
        • Level 2 (33)
      • 백준 알고리즘(단계 별) (16)
        • 총 풀이 코드(깃허브) (1)
        • 1. 입출력과 사칙연산 (2)
        • 2. if 문 (2)
        • 3. for문 (1)
        • 4. while문 (2)
        • 5. 1차원 배열 (3)
        • 6. 함수 (1)
        • 7. 문자열 (1)
        • 8. 기본수학 1 (3)
      • 백준 알고리즘(solved.ac) (9)
        • 총 풀이 코드(깃허브) (1)
        • class2 (8)
      • LeetCode 문제 풀이 (4)
        • 총 풀이 코드(깃허브) (1)
        • Easy (3)
      • 코드업 알고리즘 (7)
      • git과 github사용법 (4)
      • html, css, javaScript (2)
      • 프로젝트 (11)
        • 순수 Java 프로젝트 (2)
        • 쇼핑몰 프로젝트 (2)
        • 게시판 프로젝트 (5)
        • 근태관리 프로젝트 (2)
      • 커피타임 (2)
        • 2023년 (2)
        • 2024년 (0)
  • 블로그 메뉴

    • 링크

      • 포트폴리오
      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • Designed By정상우
    BvrPark
    [프로그래머스][Level2][Java] 위장
    상단으로

    티스토리툴바