momodudu.zip

#1 String Manipulation 본문

Problem Solving/해커랭크

#1 String Manipulation

ally10 2019. 9. 3. 11:06

마지막으로 푼 문제들 정리겸 포스팅.

 

1) String: Making Anagrams

Anagram의 기본적인 문제. 두 string을 서로 anagram 관계로 만드려면 알파벳을 모두 몇개 삭제해야되는지 출력하는 문제. 각 string의 alphabet counting후 다른 갯수를 리턴해주면 된다.

 

2) Alteranting Characters

하나의 string에서 문자열이 한번씩 반복되도록 하려면 문자열에서 문자를 몇개 삭제해야되는가? 의 문제

아주 간단한 반복문 문제. 첫 문자열을 저장해놓고, 반복문을 돌리면서 이전 문자열과 비교한다.

이전 문자열과 다르면 counting하지 않고, 이전 문자열과 같으면 counting한다.

 

3) Sherlock and valid string

valid string이란, 문자열에서 각 문자가 같은 "빈도"로 반복되는 걸 의미함. 단, 문자열에서 문자를 1번만 삭제해도 valid string조건을 만족한다면 valid하다. valid string을 만들 수 있는지를 return하는 문제다. 일단 문자열에서 알파벳의 빈도수를 체크한다. 예를들어서, abbcd라면 a:1 b:2 c:1 d:1 이다. 모든 문자가 1번씩만 반복이 되어야 하므로 b를 한번만 삭제하면 된다. 위 문자열에서 빈도수는 (1,2,1,1)이라고 할 수 있다. 이 벡터를 sorting을 시킨다. 그럼 (2,1,1,1)이 되겠지. for문을 돌면서 max값을 넣고, 다음 값을 체크한다. max값이랑 같으면 skip. 이제 max값은 삭제할 수 있는 가능성이 사라졌다. 높은 빈도수를 가진게 2번 나왔으니께. 그럼 나머지를 돌면서 max가 아닌 애를 한번만 삭제해도 되냐? 를 보면 된다. max값을 넣고 for문 처음에 다른게 나왔을때도 같다. 만약 다른게 나오면 그 다른값으로 갱신시켜준후에 삭제할수있는지 없는지를 본다.

 

4) Special String Again

만들 수 있는 special substring의 개수를 리턴하는 문제. special string은 중앙을 기점으로 좌우 대칭 문자라고 보면 되겠다. 일단 문자열을 쭉 훑어가면서 나타나는 빈도수를 consecutive하게 체크한다.

음.. 예를들어서, mnonopoo라면, m:1, n:2, o:4, p:1 이렇게 체크하는게 아니고, 문자 순서를 따라서 체크한다.

m:1 -> n:1 -> o:1 -> n:1 -> o:1 ->p:1 -> o:2 이렇게.

 

1개 이상의 같은 문자가 반복되는 substring의 개수는 n*(n+1)/2.

그 외에 좌우 대칭 문자를 구하기 위해서 for문을 돌면서 frequency가 1번인데 좌우 같은 문자가 있다면

좌우 frequency중에 작은값을 선택해서 counting한다.

 

5) Child String.

두개의 문자열중에 각각 어떤 문자들을 삭제했을 때 같은 string을 만들 수 있을 때 child String이라고 한다. child string의 maximum length를 구하는 문제이다. 이때 주의해야 할것은 순서가 유지가 되어야 한다.

 

SHINCHAN / NOHARAA 이 두개가 주어졌을 때, 정답은 NHA = 3이다.

주의할 점은, ABCD와 ABDC가 있다 하면 CD의 순서가 바뀌어 있으므로 정답은 AD가 되는것이다. 즉. 문자열의 A->B->C->D 이 순서는 유지가 되어야 한다는 점이다.

 

어디서 많이 본 LCS문제이다. "최장부분공통수열" 주로 다이나믹 프로그래밍 예제에서 많이 쓴다.

1) 문자열이 같을 때 lcs(i,j) = lcs(i-1,j-1)+1

2) 문자열이 다를 때 lcs(i,j) = max(lcs(i-1,j),lcs(i,j-1))

 

최장부분공통수열만 생각해내면 풀이법은 어렵지 않다.

String은 정말 코딩테스트에서도 꼭 Easy~Medium 난이도 정도로 하나씩 출제되는 문제인데

정말 응용문제가 많다. 무궁무진한 string....

'Problem Solving > 해커랭크' 카테고리의 다른 글

#4 Greedy  (0) 2019.09.03
#3 Search  (0) 2019.09.03
#2 Dictionaries-hash map  (0) 2019.09.03