Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 그리디
- Servlet
- 스프링 핵심 원리
- QueryDSL
- SpringBoot
- 스프링 핵심 기능
- JDBC
- 알고리즘
- 인프런
- pointcut
- kotlin
- Proxy
- AOP
- Thymeleaf
- 백준
- 스프링
- java
- JPQL
- jpa
- http
- springdatajpa
- Exception
- transaction
- db
- Greedy
- 자바
- 김영한
- Android
- spring
- Spring Boot
Archives
- Today
- Total
개발자되기 프로젝트
[프로그래머스] 위장 본문
1. 문제
- 문제 설명
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
- 종류이름
얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트
- 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
- 제한사항
- clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
- 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.
- 같은 이름을 가진 의상은 존재하지 않습니다.
- clothes의 모든 원소는 문자열로 이루어져 있습니다.
- 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
- 스파이는 하루에 최소 한 개의 의상은 입습니다.
- 입출력 예
clothes return [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]] 5 [["crowmask", "face"], ["bluesunglasses", "face"], ["smoky_makeup", "face"]] 3
- 입출력 예 설명
- 예제 #1
headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다. -
1. yellow_hat 2. blue_sunglasses 3. green_turban 4. yellow_hat + blue_sunglasses 5. green_turban + blue_sunglasses
- 예제 #2
face에 해당하는 의상이 crow_mask, blue_sunglasses, smoky_makeup이므로 아래와 같이 3개의 조합이 가능합니다. -
1. crow_mask 2. blue_sunglasses 3. smoky_makeup
2. 초기 아이디어
- HashMap을 사용하여 옷장에 옷을 종류별로 구분하여 넣자.
- 각 종류별 경우의 수는 아래 표와 같다.
종류 | A | B | C |
옷 | a, b, c | d, e | f |
경우의 수 | 4(3+1) (a or b or c or x) |
3(2+1) | 2(1+1) |
각 경우의 수를 곱해주고 아무것도 안입는 하나의 경우를 제외해주면 된다.
3. 코드
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, ArrayList<String>> closet = new HashMap<>();
ArrayList<String> clotheList;
//배열을 싹 돌면서
for (String[] clothe : clothes) {
clotheList = new ArrayList<>();
//현재 옷의 종류가 옷장에 있는 경우
if (closet.containsKey(clothe[1])){
//해당 옷의 종류에 옷 추가
closet.get(clothe[1]).add(clothe[0]);
}else {
//현재 옷의 종류가 옷장에 없는 경우
clotheList.add(clothe[0]);
//옷장에 새로 넣음.
closet.put(clothe[1],clotheList);
}
}
System.out.println(closet);
//["A", {"asdfsdf", "sdasdasd"}],["B", {"asdasd"}], ["C", {"qweqwe"}],["D",{"123123"}],["E", {"Asd5"}]]
for (String category : closet.keySet()) {
answer *= closet.get(category).size()+1;
}
//모두 선택 안하는 경우 제외;
return --answer;
}
4. 결과
- 모든 테스트 통과
5. GitHub :211127 Camouflage
'코테준비' 카테고리의 다른 글
[프로그래머스] 다리를 지나는 트럭 (0) | 2021.11.29 |
---|---|
[프로그래머스] 프린터 (0) | 2021.11.27 |
[프로그래머스] 기능개발 (0) | 2021.11.27 |
[프로그래머스] 전화번호 목록 (0) | 2021.11.25 |
[프로그래머스] 완주하지 못한 선수 (0) | 2021.11.24 |
Comments