본문 바로가기
Programming/Code Challenge

[C++ HackerRank 코드 챌린지] 0-4. Repeated String

by 항공학도 2020. 4. 26.

계속해서 HackerRank interview-preparation-kit에 속한 문제중 Repeated String에 관해 풀어보도록 하겠습니다.

저의 코드는 github에 올려 두었으니 참고하시면 좋겠습니다.

이문제는 입력으로 문자열과 써야할 문자의 개수가 들어 왔을 때 출력되는 문자열에서 'a'가 몇번 박복되는지 찾는 문제입니다. 

aba
10

만약 위와 같은 입력이 들어 왔다고 하면, aba로 10글자를 만들고 그 글자에서 a가 몇번 나오는지 계산해서 출력해주면 됩니다. 이 경우에는

abaabaabaa 이 되므로 총 a는 7번 반복되죠.

long repeatedString(string s, long n) {

    long a_count = 0;
    int a_count_in_s=0;    
    
    if((int)s.size()==1){        
        if(s[0] == 'a') return n;
        else return 0;
    } 
    
    for(auto i:s){
        if(i=='a') a_count_in_s++;
    }
    
    for(int i=0; i< n%(int)s.size(); i++){
        if( s[i] == 'a' ) a_count++;
    }  
    a_count += a_count_in_s*(n/(int)s.size());    
    return a_count;
}

 우선 입력되는 string의 size가 1일경우에는 한 문자인 경우이므로 이 입력이 a일경우에는 a가 n번 반복되게 됩니다. 따라서 n을 return하고 그렇지 않을경우에는 a가 포함될 수 없으므로  0을 return하도록 하였습니다.

if((int)s.size()==1){
        
    if(s[0] == 'a') return n;
    else return 0;
} 

s가 두글자 이상일 경우에는 다음과 같이 계산하였습니다.

1. 먼저 s안에 a가 몇글자 있는지 구하고 n글자를 만들기 위해 입력된 s가 반복되는 횟수를 구한다.

2. n글자를 만들기 위해 s를 반복하고 추가해야할 글자가 몇글자 인지 계산한다. 

    -예를들어 s가 3글자이고 n=11이면, s를 3번반복하고 s중에서 앞2글자를 더 붙인다.

  s안에 a가 몇번 들어가는지 구한다.
  for(auto i:s){
      if(i=='a') a_count_in_s++;
  }
반복하고 남은 글자수 중에 a가 몇번 들어가는지 구한다
for(int i=0; i< n%(int)s.size(); i++){
    if( s[i] == 'a' ) a_count++;
}  

이렇게 작성하고 코드를 제출하면 다음과 같이 success가 나오네요 

이번에도 leaderboard 중에 흥미로운 답이 있어서 올려 놓도록 하겠습니다

int main(){

	ios_base::sync_with_stdio(0);
	cin >> st;
	cin >> n;

	long long ful = n / st.size();
	int rem = n%st.size();
	for (int i = 0; i < st.size(); i++)
	{
		if (st[i] == 'a')
		{
			res += ful + (i < rem);
		}
	}
	cout << res << endl;

	cin.get(); cin.get();
	return 0;
}

res += ful+(i<rem); 으로 구현한 부분이 멋지네요. 

댓글