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

Leave a Reply

Your email address will not be published. Required fields are marked *