인프런 커뮤니티 질문&답변

대기업목표님의 프로필 이미지

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1-J

1-J 반례

작성

·

158

0

안녕하십니까 큰돌님

코드를 작성했었는데 틀렸다고 하는데 반례 어떤게 있을까요 ??

반례와 왜 안 되는지도 설명 한 번 부탁드립니다 ㅜㅠ

http://boj.kr/4eae857b9f4243aa90c9206ce1aabd15

답변 2

0

if 문 코드는 headgear, eyewear, face 등과 같이 의상의 종류가 1개 이상이면 경우의 수를 곱하는 작업입니다.

마지막에 n을 더해준 이유는 의상의 종류가 1개일 때는 if문이 작동 안하니까 의상의 갯수만큼 더해줬습니다 ..!

큰돌님의 프로필 이미지
큰돌
지식공유자

음...

저 j가 mp.size()고 사실 mp에는 해당 종류마다 카운팅되어있는 수가 들어있잖아요.

예를 들어

mp[1] = 3;

mp[2] = 4;

이렇게 들어있겠죠.

이 종류가 몇개 들어있냐. 를 기반으로 로직을 짜야 합니다. 예를 들어 헬멧이 10개, 윗옷이 10개라면 경우의 수는 100 - 1인 99가 되겠죠?

즉 3, 4를 기반으로 로직을 짜야 합니다.

 

근데 여기서 갑자기 의상의 종류의 수를 나타내는 (앞의 코드에서는 2가 되겠죠?) mp.size()부터 곱하기를 하는 부분은 잘못된 것 같습니다.

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 대기업님 ㅎㅎ

혹시 이 코드 설명 가능하실까요?

        if (mp.size() > 1) {
            ret = 1;
            for (int j = mp.size(); j > 1; j--)
            ret *= j;
        }
        
        cout << n + ret << "\n";

mp에 쌓으신 것은 잘하셨습니다. ㅎㅎ

 

감사합니다.