Knowledge Map

HackerRank - Super Reduced String 본문

알고리즘

HackerRank - Super Reduced String

2017. 10. 23. 12:00


문제 [여기]

중복된 문자열을 2개씩 지우고 가장 줄여진 문자열을 반환하는 함수를 만드는 문제이다. 
예를 들면 문자열 aaabccddd 가 있을 경우 abccddd => abddd => abd 이런식으로 만들면 된다. 삭제되는 문자열의 순서는 상관없다.
즉 aabcc가 있다면 aab, bcc 둘다 상관없다. 또한 bddb의 경우 bddb => bb => "" 가 된다.

만약 문자열이 없다면 Empty String을 반환하면 된다.

풀이

// 실행 함수
const super_reduced_string = s => A(s) || 'Empty String';
 
// 문자열 체크 및 삭제해주는 함수
const A = str => {
  for(let i = 1; i < str.length;i++){
    if(str[i-1=== str[i]) { return A(str.split(str[i-1+ str[i]).join("")) }
  }
  return str;
}
cs


자바스크립트에는 split와 join이라는 편리한 내부 메서드가 존재한다. split자체가 해당 문자열을 없애면서 배열을 만들어 주기 때문에 해당 문자열의 인덱스를 가져와서 그것의 +1 만큼 없애줘야 하는 약간은 번거로운 과정을 split으로 대체하였다.


로직을 보자면

1. super_reduced_string 함수에 목표 인자s를 입력한다.

2. A함수에 입력한다.

3. str을 순회하면서 i번째와 i-1번째의 값을 비교해준다.

3-1. 만약 같을 경우 두 문자열을 없애주고 다시 A로 재귀호출을 한다.

4. 순회가 끝나면 중복 문자열이 없다는 의미이기 때문에 str을 리턴해준다.

5. 리턴된 str의 값이 "" 이라면 Empty String을 반환하고 그렇지 않으면 해당 결과값을 반환한다.

'알고리즘' 카테고리의 다른 글

HackerRank - 3D Surface Area  (0) 2017.11.17
HackerRank - HackerRank in a String!  (0) 2017.10.25
HackerRank - Between Two Sets  (0) 2017.10.22
달팽이  (0) 2017.09.24
2차원 배열의 체크 알고리즘 문제  (0) 2017.09.13
Comments