[HackerRank] String Construction

아르당·2024년 5월 2일

HackerRank

목록 보기
79/109
post-thumbnail

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

Problem

아만다는 소문자 문자열을 새로운 문자열로 복사하려고 한다. 그녀는 주어진 비용으로 다음과 같은 작업을 실행할 수 있다.

  • 문자를 문자열 p의 끝에 추가하는데 1달러의 비용이 든다.
  • 문자열 p의 임의의 부분 문자열을 선택하고 해당 부분 문자열을 무료로 문자열 p의 끝에 추가할 수 있다.

주어진 n개의 문자열 s[i]에 대해, 각 s[i]를 p[i]로 복사하는 최소 비용을 찾아 출력해라.
예를 들면, 문자열 s = abcabc가 주어졌을 때, 3달러로 복사될 수 있다. 먼저 각각의 문자 a, b, c를 1달러씩 비용을 지불하여 복사한다. 이 시점에 문자열 p는 abc이다. p[0:2]를 p 끝에 복사는 비용 없이 복사할 수 있다.

Function Description

stringConstruction 함수를 완성해라. 문자열을 복사하는 최소 비용을 반환해야 한다.
stringConstruction 함수는 아래와 같은 매개변수를 가지고 있다.

  • s: 문자열

Constraints

  • 1 <= n <= 5
  • 1 <= |s[i]| <= 10^5

Solved

이 문제도 Two String과 같은 방법으로 해결할 수 있다.
먼저 Two String에서 사용한 메소드 int[] getStringCount(String s)을 그대로 사용한다.

public static int[] getStringCount(String s){
	int[] count = new int[26];

	for(int i = 0; i < s.length(); i++){
		count[s.charAt(i) - 'a']++;
	}

	return count;
}

이제 stringConstruction 메소드를 완성한다.
먼저 정수형 변수 cost를 생성하고 0을 할당한다. 그리고 정수형 배열 counts를 선언하고 getStringCount(s)를 할당한다.

int cost = 0;
int[] counts = getStringCount(s);

반복문을 통해 count가 0보다 클때, cost를 증가시킨다.

for(int i = 0; i < 26; i++){
	if(counts[i] > 0){
		cost++;
	}
}

마지막으로 cost를 반환한다.

return cost;

All code

public static int stringConstruction(String s) {
	int cost = 0;
	int[] counts = getStringCount(s);

	for(int i = 0; i < 26; i++){
		if(counts[i] > 0){
			cost++;
		}
	}

	return cost;
}

public static int[] getStringCount(String s){
	int[] count = new int[26];

	for(int i = 0; i < s.length(); i++){
		count[s.charAt(i) - 'a']++;
	}

	return count;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글