반응형
백준 9375번 문제 - 패션왕 신해빈
9375번: 패션왕 신해빈
첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.
www.acmicpc.net
문제 분석

- 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있는지 날짜를 출력해라.
- n개에는 해빈이가 가진 의상의 이름과 의상의 종류가 공백으로 구분되어 주어진다. 같은 종류의 의상은 하나만 입을 수 있다.
해결 포인트
- TreeMap으로 의상 종류에 따른 개수 구하기
- key가 의상 종류 | value가 해당 의상 종류 개수
- value만 가져오기
- ArrayList<Integer> values = new ArrayList<>(clothes.values());
- 방법 1 : 재귀 함수 사용 (조합) → 실패 ! 시간초과 !
- 조합 최대 개수(size)와 현재 조합에 사용된 개수(count), 현재 몇번째 의상 종류인지(n) 을 인자로 주는 조합을 구하는 재귀 함수 구현
public class Main {
public static void main(String[] args) {
long sum = 전체 의상 개수;
ArrayList<Integer> values = new ArrayList<>(clothes.values());
for (int i = 2; i <= values.size(); i++) {
for (int j = 0; j < values.size(); j++) {
sum += combination(values, i, 1, j);
}
}
bw.write(sum + "\n");
}
public static int combination(ArrayList<Integer> values, int size, int count, int n) {
if (count >= size) {
return values.get(n);
}
int sum = 0;
for (int i = n + 1; i < values.size(); i++) {
sum += combination(values, size, count + 1, i) * values.get(n);
}
return sum;
}
}
- 방법 2 : 해당 종류 옷을 벗는 경우까지 해서 모든 경우의 수 구하기 → 성공
- 각 옷 종류 별 개수 + 1 해서 모든 종류를 곱한다.
- 모두가 벗는 경우 1를 빼준다.
long sum = 1;
ArrayList<Integer> values = new ArrayList<>(clothes.values());
for (int i = 0; i < values.size(); i++) {
sum *= values.get(i) + 1;
}
bw.write(sum-1 + "\n");
코드
import java.io.*;
public class Main {
public static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
int [] stairs = new int[N+1];
for (int i = 1; i <= N; i++) {
stairs[i] = Integer.parseInt(br.readLine());
}
int [] dp = new int[N+1];
dp[0] = 0;
dp[1] = stairs[1];
if(N >= 2) {
dp[2] = stairs[1] + stairs[2];
}
for (int i = 3; i <= N; i++) {
dp[i] = Math.max(dp[i-3] + stairs[i-1], dp[i-2]) + stairs[i];
}
bw.write(dp[N] + "\n");
bw.flush();
bw.close();
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[프로그래머스] N으로 표현 (JAVA) (1) | 2023.12.18 |
---|---|
[백준 11727] 2×n 타일링 2 (JAVA) (0) | 2023.12.17 |
[백준 2579] 계단 오르기 (JAVA) (0) | 2023.12.14 |
[백준 7576] 토마토 (JAVA) (0) | 2023.12.13 |
[백준 1074] Z (JAVA) (0) | 2023.12.13 |