패션왕 신해빈 다국어
1 초 | 128 MB | 41773 | 23250 | 19510 | 55.437% |
문제
해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까?
입력
첫째 줄에 테스트 케이스가 주어진다. 테스트 케이스는 최대 100이다.
- 각 테스트 케이스의 첫째 줄에는 해빈이가 가진 의상의 수 n(0 ≤ n ≤ 30)이 주어진다.
- 다음 n개에는 해빈이가 가진 의상의 이름과 의상의 종류가 공백으로 구분되어 주어진다. 같은 종류의 의상은 하나만 입을 수 있다.
모든 문자열은 1이상 20이하의 알파벳 소문자로 이루어져있으며 같은 이름을 가진 의상은 존재하지 않는다.
출력
각 테스트 케이스에 대해 해빈이가 알몸이 아닌 상태로 의상을 입을 수 있는 경우를 출력하시오.
예제 입력 1 복사
2
3
hat headgear
sunglasses eyewear
turban headgear
3
mask face
sunglasses face
makeup face
예제 출력 1 복사
5
3
힌트
첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.
글 내용은 별로 없지만, 영포자는 영어 단어들을 보고 정신이 혼미해지기 시작했다.
어쩌면 아까 내 머리에서 탈출해서 방 천장을 날아다녔던 벌레가 떠올라서 혼미한 걸지도...
그것도 아니라면 몇 시간 전 메가박.... (생략)
해빈이는 환경주의자가 아닌 건 확실하다.
그냥 대충 살아줫으면... 하
입력으로 받는 건
1. 해빈이 의상 개수(0 <= n <=30)
2. for (int i = 0; i < n; i++) {의상이름 의상종류}
예제 입력을 보니 또 무슨 소리인지 모르겠다.
아
문제를 잘못 읽었다.
첫째 줄에 테스트 케이스가 주어진다....
그럼
테스트 케이스 개수만큼 해빈이 의상 세트를 입력하라는 건가
글고 그 의상 세트만 갖고서 입히라고?
예제가 더 놀라워졌다... 해빈이는 썬구리만 쓰고도 밖을 나가는데 왜 알몸으론 못 나가는 걸까....🤔
어쨌든간에 풀어보자...
첨에는 파이썬 딕셔너리를 생각했다. 근데 난 자바로 하고 있단 말야.. 이걸 자바로 어떻게 해야 할까...
어쩌면 종류의 개수만 중요하지 이름이 중요할지도 모른다. 어차피 같은 종류는 한 번에 하나밖에 못하니까!!
헤드기어 2종류 아이웨어 1종류일 때 경우의 수 5
face 3종류일 때 경우의 수 3
종류는 다 써도 되고 안 써도 되고 대신 발가벗으면 안 되고... 그러면 1씩 더해서(미착용 경우) 곱한 담에 1 빼면(암것도 안 써서 발가벗은 거) 되는 거 아닌가?? 확통이네~~ 김성은쌤 감사합니다. 하 이거 쓰고 나서 김성은쌤 근황 궁금해서 검색했다가 메가 4타로 떨어졌다는 슬픈 얘기 봄... 쌤 좋은데 왜져?... 근데 이걸 어떻게 구현하지...?!!! 그래도 알고리즘은 대충 생각했으니 좀 됐다. 안 돌려봐서 맞는 논리인진 모르겠지만 말이야
처음엔 배열을 써보려다가 아무리 생각해도 이건 좀... 아닌 듯 했다. 실제로 짜보기도 했는데 도저히... 짤 수가 없었다.
Map을 써야 하나? key value 있으니까..
Map을 잘 안 다뤄봐서 열심히 구글링 중... 이거 값 put은 했는데 어떻게 전체 순회하면서 value만 꺼내주지!!!!!
Set<Entry<String, Integer>> entirySet = clothes.entrySet();
이걸 찾았다... 12시 전에 올리려고 했는데 넘어감 이럴 수가 쓰던 글도 삭제 됐어 어이가 없네
암튼 저게 entry(key-value)쌍을 set 객체로 반환해서 for-each로 순회할 수 있다는 거다
그래서 나온 1차 코드가
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 테스트케이스 개수 입력
int testCase = sc.nextInt();
// 테스트 케이스 개수만큼 반복
for (int i = 0; i < testCase; i++) {
int n = sc.nextInt(); // 의상 개수 입력
Map<String, Integer> clothes = new HashMap<>();
for (int j = 0; j < n; j++) {
sc.next(); // 일단 입력은 받고 날리자
String tmp = sc.next(); // 옷 종류
if (clothes.get(tmp) == null) {
clothes.put(tmp, 1);
} // Map에 옷 종류가 저장이 안 돼있으면 1로 저장
else {
clothes.put(tmp, clothes.get(tmp) + 1);
} // 저장돼있으면 값 갖고 와서 1 더해주기
}
int result = 1; // 경우의 수 담을 변수
Set<Entry<String, Integer>> entirySet = clothes.entrySet();
for (Entry<String, Integer> e: entirySet) {
result *= e.getValue();
}
System.out.println(result);
}
sc.close();
}
}
이거였고 당연히 ^^
내가 초반에 생각했던 알고리즘 적용을 깜빡하고 안 했다. (곱하기 전에 1 더해주고 마지막에 1 빼주기)
그래서 이 부분을 수정해서 다시 돌렸고
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 테스트케이스 개수 입력
int testCase = sc.nextInt();
// 테스트 케이스 개수만큼 반복
for (int i = 0; i < testCase; i++) {
int n = sc.nextInt(); // 의상 개수 입력
Map<String, Integer> clothes = new HashMap<>();
for (int j = 0; j < n; j++) {
sc.next(); // 일단 입력은 받고 날리자
String tmp = sc.next(); // 옷 종류
if (clothes.get(tmp) == null) {
clothes.put(tmp, 1);
} // Map에 옷 종류가 저장이 안 돼있으면 1로 저장
else {
clothes.put(tmp, clothes.get(tmp) + 1);
} // 저장돼있으면 값 갖고 와서 1 더해주기
}
int result = 1; // 경우의 수 담을 변수
Set<Entry<String, Integer>> entirySet = clothes.entrySet();
for (Entry<String, Integer> e: entirySet) {
result *= (e.getValue() + 1); // 착용하지 않는 경우를 고려한 1 더하기
}
System.out.println(result - 1); // 출력할 때 알몸 경우 빼기
}
sc.close();
}
}
이번엔!
네 그렇다고 합니다~
해빈아 이제 옷 잘 입고 댕겨야 한다~
'백준 풀기' 카테고리의 다른 글
백준 15655번: N과 M (6) with Java (0) | 2024.07.12 |
---|---|
백준 1004번: 어린 왕자 with Java (0) | 2024.07.11 |
백준 2559번: 수열 with Java (0) | 2024.07.07 |
백준 15657번: N과 M(8) with Java (1) | 2024.07.05 |
백준 13305번: 주유소 with Java (1) | 2024.07.02 |