Leetcode Java Letter Tile Possibilities
업데이트:
문제
코드
class Solution {
public int numTilePossibilities(String tiles) {
int[] count = new int[26];
for (char c : tiles.toCharArray()) {
count[c - 'A']++;
}
return this.dfs(count);
}
private int dfs(int[] count) {
int sum = 0;
for (int i = 0; i < 26; i++) {
if (count[i] > 0) {
sum++;
count[i]--;
sum += this.dfs(count);
count[i]++;
}
}
return sum;
}
}
결과
설명
-
tiles 내 문자들을 이용하여 중복되지 않은 고유 문자열들을 만들 수 있는 최대 갯수를 계산하는 문제이다.
-
count는 tiles내 문자들의 갯수를 계산할 변수로, 영문자 갯수인 26 크기의 정수 배열로 초기화하여 tiles 내 문자들에 해당하는 위치에 갯수를 넣어준다.
-
4번에서 정의한 dfs(int[] count) 메서드를 수행한 결과를 주어진 문제의 결과로 반환한다.
-
DFS 방식으로 고유 문자열의 갯수를 계산하기 위한 dfs(int[] count) 메서드를 정의한다.
- sum은 고유 문자열 갯수의 합을 저장할 변수로, 0으로 초기화한다.
- 0부터 count의 길이인 26 미만까지 아래를 반복한다.
- count[i]의 값이 0보다 큰 경우 아래를 수행하고 그 외는 다음 반복을 수행한다.
- sum을 증가하고 count[i]를 감소시킨다.
- 감소시킨 count를 이용하여 sum에 재귀호출을 수행한 결과를 더해준다.
- count[i]를 다시 증가시켜 원복해준다.
- 반복이 완료되어 계산된 고유 문자열의 갯수인 sum을 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기