[HackerRank] Repeated String

아르당·2023년 11월 21일
0

HackerRank

목록 보기
24/109
post-thumbnail

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

문제

무한히 반복되는 영어 소문자 문자열 s가 있다. 정수 n이 주어졌을 때, 무한 문자열에서 처음부터 n개의 문자 중에 'a'가 몇 개인지 구해라.

Example

s = 'abcac'
n = 10

abcac가 무한히 반복하고, 무한 문자열의 처음부터 10번째 문자까지 구한다. 부분 문자열에서 'a'의 갯수는 4개이다.

Function Description

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

  • s: 반복하는 문자열
  • n: 부분 문자열의 길이

Return

  • int: 부분 문자열에서 'a'의 갯수

Constraints

  • 1 <= |s| <= 100
  • 1 <= n <= 10^12

풀이

while문을 사용해 n까지 반복해서 풀어봤지만 타임아웃이 발생해서 나눗셈을 사용해 풀었다. a의 전체 갯수를 담을 count와 부분 문자열에서 a의 갯수를 담을 aCount를 선언하고 0을 할당한다.

// int로 선언했을 때 통과되지 않는 부분이 있는 것으로 생각돼서 long으로 선언
long count = 0;
int aCount = 0;

for문을 통해 부분 문자열의 a 갯수를 구한다.

for(int i = 0; i < s.length(); i++){
	if(s.charAt(i) == 'a'){
		aCount++;
	}
}

몫을 구하고, 몫과 부분 문자열의 a 갯수를 곱해서 전체 갯수에 할당하고, aCount에 0을 할당한다. 그리고 나머지를 구해준다. 반복문을 통해 남은 길이의 a의 갯수를 구해주고 전체 갯수에 더 해준다.

long quotient = n / s.length();
count = quotient * aCount;
aCount = 0;
long remainder = n % s.length();

for(int i = 0; i < remainder; i++){
	if(s.charAt(i) == 'a'){
		aCount++;
	}
}
        
count += aCount;

count를 반환한다.

return count;

전체 코드

public static long repeatedString(String s, long n) {
	long count = 0;
	int aCount = 0;

	for(int i = 0; i < s.length(); i++){
		if(s.charAt(i) == 'a'){
			aCount++;
		}
	}

	long quotient = n / s.length();
	count = quotient * aCount;
	aCount = 0;
	long remainder = n % s.length();

	for(int i = 0; i < remainder; i++){
		if(s.charAt(i) == 'a'){
			aCount++;
		}
	}

	count += aCount;

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

0개의 댓글