일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 치지직
- swift문법
- OS
- Swift 문법
- 데이터베이스 공부
- 소프트웨어분석및설계
- 제앱소
- Apple Developer Academy @ POSTECH
- 네이버 치지직
- 운영체제
- apple developer academy 후기
- StateObject
- SWIFT
- global soop
- 숭실대
- 애플 디벨로퍼 아카데미
- 애플 아카데미 후기
- 애플 디벨로퍼 아카데미 21주차 회고
- useReducer
- ObservedObject
- 네이버 부스트캠프
- 데이터베이스
- Swift 디자인패턴
- iOS 개발 오류
- sqoop
- 앱 비교 프로젝트
- Swift 기능
- react
- 애플 디벨로퍼 아카데미 후기
- ObservableObject
- Today
- Total
사과하는 제라스
[백준 BOJ 9375번] 패션왕 신해빈 본문
목차
출처 : https://www.acmicpc.net/problem/9375
1. 문제
해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까?
2. 입력
첫째 줄에 테스트 케이스가 주어진다. 테스트 케이스는 최대 100이다.
- 각 테스트 케이스의 첫째 줄에는 해빈이가 가진 의상의 수 n(0 ≤ n ≤ 30)이 주어진다.
- 다음 n개에는 해빈이가 가진 의상의 이름과 의상의 종류가 공백으로 구분되어 주어진다. 같은 종류의 의상은 하나만 입을 수 있다.
모든 문자열은 1이상 20이하의 알파벳 소문자로 이루어져있으며 같은 이름을 가진 의상은 존재하지 않는다.
2
3
hat headgear
sunglasses eyewear
turban headgear
3
mask face
sunglasses face
makeup face
3. 출력
각 테스트 케이스에 대해 해빈이가 알몸이 아닌 상태로 의상을 입을 수 있는 경우를 출력하시오.
5
3
4. 풀이
입력에서 각 줄의 첫 단어는 중요하지 않다. 그냥 단순히 제품명이구나~~이 정도로만 생각하면 되고(사실 생각하는 것도 아깝다.) 두번째 단어는 종류의 이름이니 필요한 단어이다. 일단 어떤 종류의 제품이 2가지가 있다면 총 3가지 방법이 있다. 1.아예 안입는 경우, 2. 제품1을 입는 경우, 3. 제품2를 입는 경우. 이런 방식으로 순열을 계산하면 된다. 이때 중요한 것은 마지막에는 -1을 해주어 아무것도 안 걸치는 경우는 빼준다.
5. 소스코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++){
int num = Integer.parseInt(br.readLine());
int cnt = 0;
String [] category = new String [30];
int [] count = new int [30];
for(int j=0; j<num; j++){
String str = (br.readLine()).split(" ")[1];
if(cnt == 0){
category[0] = str;
count[0]++;
cnt++;
continue;
}
for(int k=0; k<cnt; k++){
if(category[k].equals(str)){
count[k]++;
break;
}
if(k == cnt-1){
category[cnt] = str;
count[cnt] += 1;
cnt++;
break;
}
}
}
int result = 1;
for(int j=0; j<cnt; j++){
if(count[j] != 0) result *= (count[j]+1);
}
System.out.println(result-1);
}
}
}
6. 배운 것
split으로 나누고서 그 중 두번째 원소를 사용하고 싶을 땐 아래처럼 사용하면 된다. 즉, split으로 끊고 원하는 위치의 원소를 가져오는 것이 가능하다.
String str = (br.readLine()).split(" ")[1];
또한, 이전에도 유의해야 했지만 String의 경우엔 ==이 아닌 .equals() 함수로 비교를 해야한다.
'JAVA 백준 알고리즘 문제풀이 > 정수론 및 조합론' 카테고리의 다른 글
[백준 BOJ 2004번] 조합 0의 개수 (0) | 2022.01.25 |
---|---|
[백준 BOJ 1676번] 팩토리얼 0의 개수 (0) | 2021.12.23 |
[백준 BOJ 1934번] 최소공배수 (0) | 2021.12.23 |