문제
상근이는 카드 n(4 ≤ n ≤ 10) 장을 바닥에 나란히 놓고 놀고 있다. 각 카드에는 1 이상 99 이하의 정수가 적혀 있다. 상근이는 이 카드 중에서 k(2 ≤ k ≤ 4) 장을 선택하고, 가로로 나란히 정수를 만들기로 했다. 상근이가 만들 수 있는 정수는 모두 몇 가지일까?
예를 들어, 카드가 5장 있고, 카드에 쓰여 있는 수가 1, 2, 3, 13, 21라고 하자. 여기서 3장을 선택해서 정수를 만들려고 한다. 2, 1, 13을 순서대로 나열하면 정수 2113을 만들 수 있다. 또, 21, 1, 3을 순서대로 나열하면 2113을 만들 수 있다. 이렇게 한 정수를 만드는 조합이 여러 가지 일 수 있다.
n장의 카드에 적힌 숫자가 주어졌을 때, 그 중에서 k개를 선택해서 만들 수 있는 정수의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 n이, 둘째 줄에 k가 주어진다. 셋째 줄부터 n개 줄에는 카드에 적혀있는 수가 주어진다.
출력
첫째 줄에 상근이가 만들 수 있는 정수의 개수를 출력한다.
재귀 함수 : 자기 자신을 호출하는 함수
똑같은 구조의 함수를 반복해서 사용할 필요가 있을 때 적용하는 함수.
연산을 끝낼 수 있는 조건인 '탈출 조건'이 필요하다.
사실 말만 들었을 때에는 그래 계속해서 자기 자신을 호출하면서 반복하는 함수다.
라고 이해할 수 있는데 그 구조를 보면 이게 도대체 어떻게 굴러가는 구조인지 궁금했다.
코드를 보면 대충 알겠는데.. 말 그대로 대충이라서
한 번 문제를 고르고 그려봐야겠다는 생각을 했다.
그려본 결과는 아래와 같다.
위의 그림을 나타내는 코드는 다음과 같다.
그리면 조금 더 잘 이해될 줄 알았는데..
뭔가 갈피가 잡힐 듯 하면서 아직도 헤매게 된다.
한 문제 더 그려봐야겠다.
'Basic > 코딩테스트' 카테고리의 다른 글
Big O Notation 1 (대문자 O 표기법) (0) | 2022.06.13 |
---|---|
[실버 5, 1] 백준 16173, 16174번 자바(JAVA) - 점프왕 쩰리 (Small, Large) (0) | 2022.06.13 |
[브론즈 1] 백준 1834번 자바(JAVA) - 나머지와 몫이 같은 수 (0) | 2022.05.19 |
[브론즈 3] 백준 1547번 자바(JAVA) - 공 (0) | 2022.05.16 |
[브론즈 1] 백준 3054번 자바(JAVA) - 피터팬 프레임 (0) | 2022.05.15 |