카드 놓기

면접 대비

시간 제한1초메모리 제한256 MB

요약
1에서 99 사이의 수가 적힌 카드가 최대 10장 있을 때, k장을 골라 순서대로 이어 붙여 만들 수 있는 서로 다른 정수의 개수를 센다.
난이도

쉬움10점 중 3점

유형
완전 탐색, 백트래킹, 해시맵, 구현
정답자
아직 제출이 없습니다

문제

상근이는 카드 nn(4≤n≤104 \le n \le 10)장을 바닥에 나란히 놓고 놀고 있다. 각 카드에는 11 이상 9999 이하의 정수가 하나씩 적혀 있다. 상근이는 이 카드 중에서 kk(2≤k≤42 \le k \le 4)장을 골라, 고른 순서대로 왼쪽에서 오른쪽으로 늘어놓아 하나의 정수를 만들려고 한다. 상근이가 만들 수 있는 서로 다른 정수는 모두 몇 가지일까?

예를 들어 카드가 5장 있고 적힌 수가 1, 2, 3, 13, 21이라고 하자. 이 중 3장을 골라 정수를 만들 때, 2, 1, 13을 이 순서로 늘어놓으면 2113이 되고, 21, 1, 3을 이 순서로 늘어놓아도 2113이 된다. 이처럼 서로 다른 선택이 같은 정수를 만들 수도 있으므로, 중복을 제외한 서로 다른 정수의 개수를 세어야 한다.

nn장의 카드에 적힌 수가 주어졌을 때, 그중 kk장을 골라 만들 수 있는 서로 다른 정수의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 카드의 개수 nn이, 둘째 줄에 고를 카드의 개수 kk가 주어진다. 셋째 줄부터 nn개의 줄에 걸쳐 각 카드에 적힌 수가 한 줄에 하나씩 주어진다.

출력

상근이가 만들 수 있는 서로 다른 정수의 개수를 첫째 줄에 출력한다.

힌트

카드가 1,2,12,11, 2, 12, 1의 4장이고 k=2k = 2일 때, 상근이는 11,12,21,112,121,122,21211, 12, 21, 112, 121, 122, 212의 7가지 정수를 만들 수 있다.

예제2

  1. 예제 1

    입력
    4
    2
    1
    2
    12
    1
    
    예상 출력
    7
    
  2. 예제 2

    입력
    6
    3
    72
    2
    12
    7
    2
    1
    
    예상 출력
    68