반응형
[Hackerrank] Weighted Uniform Strings - (String - Easy)
www.hackerrank.com/challenges/weighted-uniform-string/problem
문제
String s와 int 배열 queries가 주어진다
그리고 queries의 숫자들이 문자열 s로 나타낼 수 있는 숫자면 YES, 아니면 NO를 출력
문자열 s가 나타내는 숫자는 a=1 ~ z=26으로 표현하는데,
예를들어 abccddde의 경우 각 문자열과 연속되는 문자열을 숫자로 표현할 수 있다
a=1, b=2, c=3, cc=3+3, d=4, dd=4+4, ddd=4+4+4, e=5
1,2,3,4,5,6,8,12를 나타낼 수 있다
해결
Map에 a~z까지 1~26을 넣어둔다
Set을 만들고,
이전 문자랑 같으면 beforSum에 숫자를 더하고 Set에 추가,
같지 않으면 그냥 set에 숫자를 추가하고 beforSum을 현재 숫자로 초기화
그리고 최종적으로 queries에 있는 숫자가 set에 있으면 Yes 아니면 No를 출력
static String[] weightedUniformStrings(String s, int[] queries) {
int a = 97;
int z = 122;
Map<Character, Integer> map = new HashMap<>();
for (int i=a; i<=z; i++) map.put((char)i, i-96);
Set<Integer> set = new HashSet<>();
char befor = ' ';
int beforSum = 0;
for (char c : s.toCharArray()) {
if(befor == c) {
beforSum += map.get(c);
set.add(beforSum);
} else {
set.add(map.get(c));
beforSum = map.get(c);
befor = c;
}
}
String[] strArr = new String[queries.length];
for (int i=0; i<queries.length ; i++) {
if (set.contains(queries[i])) {
strArr[i] = "Yes";
} else {
strArr[i] = "No";
}
}
return strArr;
}
반응형
'Algorithm > Hackerrank' 카테고리의 다른 글
[Hackerrank] Number Line Jumps (Easy) (0) | 2020.10.23 |
---|---|
[Hackerrank] Sub-array Division (Easy) (0) | 2020.10.23 |
[Hackerrank] Two Strings (Easy) (0) | 2020.10.21 |
[Hackerrank] Two Characters (Easy) (0) | 2020.10.21 |
[Hackerrank] Sherlock and the Valid String (Medium) (0) | 2020.10.18 |
댓글