본문 바로가기

BOJ 9375번 : 패션왕 신해빈 본문

BOJ

BOJ 9375번 : 패션왕 신해빈

00rigin 2020. 4. 9. 02:24

예제를 보면 알겠지만, 문자열이 꽤나 길어서.... 편하게 python을 사용하였다.

솔직히 말해서 두번 틀렸다...ㅎㅎ...

옷의 조합이 꼭 2개의 조합일 것이라고만 생각해서 경우의 수를 짜다보니 3개 이상의 조합을 빼먹을 것이다.

 

일단, 문자열 입력에서 띄어쓰기를 기준으로 뒤에 있는 옷의 종류만 알면 되기에 split()을 통해 뒷 단어만 따로 때서 dict 형에 집어 넣었다. Dict형을 사용한 이유는 옷의 종류가 같은지 다른지를 판단할때 A in ex_dic를 사용하면 매우 편해서 ㅎㅎㅎ

이후 딕셔너리의 밸류값만 따로 리스트로 만들어 연산을 수월케 했다.

 

이제 알고리즘을 알아보자.

옷의 종류 a,b,c가 각각 2,3,4개 있다고 가정하고, 각 원소의 갯수에 따른 조합의 경우의 수를 따져보자.

 

1개의 조합일때:

     2+3+4 

2개의 조합일때:

     (2*3) + (2*4) + (3*4)

3개의 조합일때:

     2*3*4

위의 모든 값을 더하면, 중복되지 않는 모든 조합의 경우의 수를 알 수 있다.

이때, 각 옷 종류의 갯수를 미지수로 바꾸어 생각해보고, 모두 더해보면 아래와 같다.

 

a+b+c+(ab)+(bc)+(ca)+abc

 

어.... 중학교의 냄새가 살짝쿵 나는데....

 

abc + (ab)+(bc)+(ca) + a + b + c = (a+1)(b+1)(c+1)-1

 

위처럼 표현 할 수 있다!!!!

옷의 종류가 4개이든, 5개이든 모두 저 꼴과 같으므로 수식을 작성 할 수 있다!

 

<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for x in range(int(input())):
    dic = {}
    res = 1
    for i in range(int(input())):
        _str = input().split()
        if(_str[1in dic): dic[_str[1]] += 1
        else:  dic[_str[1]] = 1
    _list = list(i+1 for i in dic.values())
    for i in _list:
        res*=i
    print(res-1)
    
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

<문제>

https://www.acmicpc.net/problem/9375

 

9375번: 패션왕 신해빈

문제 해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까? 입력 첫째 줄에 테스트 케이스가 주어진다. 테스트 케이스는 최대 100이다. 각 테스트 케이스의 첫째 줄에는 해빈이가 가진 의상의 수

www.acmicpc.net

 

'BOJ' 카테고리의 다른 글

BOJ 1011번 : Fly me to the Alpha Centauri  (0) 2020.04.10
BOJ 15953번 : 상금 헌터  (0) 2020.04.09
BOJ 2869번 : 달팽이는 올라가고 싶다  (0) 2020.03.22
BOJ 10844번 : 쉬운 계단 수  (0) 2020.03.15
BOJ 6603번 : 로또  (0) 2020.03.15
Comments