프로그래머스 코딩테스트 연습 -해시 3(위장)
이번엔 3번째 해시 3번째 테스트를 도전한다.
이건 제대로 어려운 문제를 만나버렸다. 이번 문제는 정말 경우의 수로 계산을 하지 않으면 풀기 어려운 문제이기 때문이다.
문제 URL은 다음과 같다(programmers.co.kr/learn/courses/30/lessons/42578)
일단 이 문제의 가장 이해가 되지 않는부분은 매일 다른 옷을 입어 위장한다고 하는데 하나만 걸쳐도 된다는것인데..
그럼 선글라스 하나만 걸치고 나머진 다 속옷차림으로 위장을 한다는것인가...
어쨌든 설명으론 이해가 되지 않지만 역시나 입력/출력 예제를 보고 각 종류별로 하나씩을 포함한 경우의 수를 작성해야 한다는 것을 알게 되었다.
역시나 경우의 수는 잼병이라 몇번 계산해보다가 인터넷의 도움을 받아 간신히 통과할 수 있었다.
경우의 수 계산은 (한 옷의 종류수+1)*(한 옷의 종류수+1)....... - 1(아무것도 안입는 경우)로 이 계산법은 이해는 안가지만 계산방식만 알면 코드로 진행하는건 시간의 문제이므로 그냥 진행했다.
중요한건 의상의 이름이 아니라 종류와 종류의 Count(가짓수)이므로 C#의 Dictionary를 이용해 옷의 종류를 Key로 가짓수를 Value로 잡아서 입력값을 분류했다.
그렇게 얼굴-3, 상의-1,하의-3 이런식으로 분류하면 앞서 계산식을 이용해 (3+1)*(1+1)*(3+1) -1 로 변경해 결과를 리턴해 줄 수 있다. 결과를 각 조합의 배열로 요구했다면 아마 계산식을 이용할수도 없기에 정말 어려울뻔했다. 하지만 문제가 요구하는건 간단한 조합의 수이므로 해결할 수 있었다.
내 답은 아래와 같다.
이번 문제는 계산식을 사용한 다른 정답들과 거의 비슷했다.
이런문제는 코딩테스트라기보단 수학테스트같아서 너무 싫다. 아무리 중등수준의 경우의 수지만 졸업하고 몇년을 안봤으니 나만 이렇게 모르진 않을텐데 통과한 다른분사람들은 참 똑똑한 것 같다.(나처럼 계산식 찾은사람 제외...)