Category Archives: HackerRank

Hackerrank Repeated String Sorusu matematiksel çözüm

Given an integer, n, find and print the number of letter a’s in the first letters of S(String)

n <= 10^6

Örneğin:

s = “abcac”

n = 10

Yeni String = “abcacabcac” (n haneli oldu ve tekrar edebildiği kadar tekrar etti)

Bizden istenen ise string içerisindeki a karakterinin sayısı: sonuç olarak 4

Çözüm:

n/s yapıldığı zaman kaç kere birinci string kümesinin kaç kere repeat yapıldığını bulabilirim. Örnekte kalan 0 ve bölüm ise 2. S içerisinde 2 adet a vardı. 2*2 den 4 adet olacağını anlıyorum. Eğer kalan olsaydı ayrıca for döngüsünü kalan sayısı kadar dönüp a ların sayısnı bulabilirim

long repeatedString(char* s, long n) {

    long strCount = strlen(s);
    long aCount = 0;
    for (int i = 0; i < strCount; i++) {
        if(s[i] == 'a'){
            aCount++;
        }
    }

    long reminder =  n % strCount;
    long division = n / strCount;
    aCount = aCount * division;

    for (int i = 0; i < reminder; i++) {
        if(s[i] == 'a'){
            aCount++;
        }
    }

    return aCount;

}

Hackerrank Warm up Challenge: Sock Merchant

Yazılım dünyasında zinde kalmanın ve hergün kod pratiği yapmanın önemli olduğunu düşünüyorum. Programlama soruları çözerek bildiğimiz dilin tekniğini daha çok öğrenme şansı bulabilir ve kendi çözümlerimizi başkalarının çözümleriyle karşılaştırabiliriz. Farklı sorular çözerek kendimizi bir üst seviyeye taşıma şansı edinebiliriz.

Firmaların mülakat süreçlerinde kullandığı/developer’ların sorular bulup kendini geliştirebileceği birkaç ortam:

Yazılarımda hackerrank üzerinde karşılaştığım bazı soruları blog siteme taşıyacağım.

Problem

Bir çorap dükkanında çorap çiftlerinin sayısının elde edilmesi. Çoraplar bir dizi içerisinde renksel olarak tutuluyor.

Örnek: 10 20 20 10 10 30 50 10 20

sock.png
Şekil 1: Çorap çiftleri

Dizi içerisinde 10(yeşil) sayısından 4 adet var. Bu durumda iki eşleşme durumu oluyor. 3 tane ise 20(mavi) var. Bu durumda 2 eşleşme olur ve mavilerden 1’i dışarıda kalır. Output olarak 2+1 = 3 eşleşme verir.

Pseudocode

def sockMerchant(n, sockArr)
   socksCountValuePair = Key Value
   count = 0
   for each sock int sockArr
      if socks contains sock
          update sock's value + 1
      else
          sock's value = 1
      if sock's value != 1 and sock's val %2 == 0
          count++
 return count;

Kod

Map<Integer, Integer> socks = new HashMap<Integer,Integer>();
int count = 0;
for(int i = 0; i < ar.length; i++) {
  int sock = ar[i];
  socks.put(sock, socks.containsKey(sock) ? socks.get(sock) + 1 : 1);
  int v  = socks.get(sock);
  if(v!=1 AND v%2==0) {
    count++;
  }		
}	
return count;

En kötü durumda karmaşıklığımız(Time complexity) O(n) olarak çalışır. Tanım ve hesaplamar sabit olarak alındı.

Bazı çözümler HashSet ile yapılmış. HashSet ve HashMap karşılaştırması için aşağıdaki linki bırakıyorum

https://stackoverflow.com/questions/2773824/difference-between-hashset-and-hashmap