문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
무한히 반복되는 영어 소문자 문자열 s가 있다. 정수 n이 주어졌을 때, 무한 문자열에서 처음부터 n개의 문자 중에 'a'가 몇 개인지 구해라.
s = 'abcac'
n = 10
abcac가 무한히 반복하고, 무한 문자열의 처음부터 10번째 문자까지 구한다. 부분 문자열에서 'a'의 갯수는 4개이다.
repeatedString 함수를 완성해라.
repeatedString 함수는 아래와 같은 매개변수를 가지고 있다.
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;
}