[HackerRank] Alternating Characters

아르당·2024년 1월 18일

HackerRank

목록 보기
69/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

오직 문자 A와 B만 포함된 문자열이 주어진다. 과제는 인접한 문자가 일치하지 않도록 문자열로 바꾸는 것이다. 여기서, 문자열에서 0개 또는 더 많은 문자를 삭제할 수 있다. 과제는 삭제에 필요한 최소 수를 찾는 것이다.

Example

s = AABAAB

위치 0과 3의 A를 제거하면 2개를 삭제해서 s = ABAB를 만들 수 있다.

Function Description

alternatingCharacters 함수를 완성해라.
alternatingCharacters 함수는 아래와 같은 매개변수를 가지고 있다.

  • String S: 문자열

Returns

  • int: 삭제에 필요한 최소 수

Constraints

  • 1 <= s의 길이 <= 10^5
  • 각 문자열 s는 오직 문자 A와 B만 존재할 것이다.

Solved

새로운 문자열을 만들어서 매개변수로 받아온 문자열과 새로 만든 문자열의 길이의 차를 구해서 문제를 해결했다.

첫 번째 문자를 담을 temp를 선언하고 s의 0번째 인덱스의 문자를 할당한다.

char temp = s.charAt(0);

그리고 StringBuilder을 생성하고 temp를 추가한다.

StringBuilder sb = new StringBuilder();
sb.append(temp);

반복문을 통해 인덱스 1부터 s를 순회하고 이때 temp와 현재 문자를 비교해서 다르면 temp에 할당하고 sb에 추가한다.

for(int i = 1; i < s.length(); i++){
	if(temp != s.charAt(i)){
		temp = s.charAt(i);
		sb.append(temp);
	}
}

마지막으로 s의 길이와 sb의 길이의 차를 반환한다.

return s.length() - sb.length();

All Code

public static int alternatingCharacters(String s) {
	char temp = s.charAt(0);
	StringBuilder sb = new StringBuilder();
	sb.append(temp);

	for(int i = 1; i < s.length(); i++){
		if(temp != s.charAt(i)){
			temp = s.charAt(i);
			sb.append(temp);
		}
	}

	return s.length() - sb.length();
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글