Mülakat Sorusu Çözümü | Kurallı Parantez Oluşturma

Поделиться
HTML-код
  • Опубликовано: 18 дек 2024

Комментарии • 35

  • @murad-dov
    @murad-dov Год назад +2

    Hocam merhabalar elinize sağlık. Bu gibi algoritma sorularına çözerken önceden white board'da nasıl bir mantık yürütüceğinizi anlatırsanız çok güzel olur. Teşekkürler.

  • @salihabdullahkilic
    @salihabdullahkilic Год назад +1

    Bellek tüketiminin daha optimize eden yaklaşımı da göstermeniz çok güzel olmuş, içeriğin için teşekkürler!

    • @TechBuddyTR
      @TechBuddyTR  Год назад

      Algoritma sorularında bellek konularına bilhassa önem göstermek gerekiyor. Teşekkürler :)

  • @hasankoc1459
    @hasankoc1459 Год назад +1

    Hocam, teşekkür ederim. Bahsettiğiniz basit düşünce mantığını biraz anladığımı söyleyebilirim. Tam olarak gerekli kuralları bulduktan sonra kodlama tarafına en basit şekilde geçmem gerekiyormuş. Emeğiniz için tekrar teşekkür ederim.

  • @yasaroguzocaktan9005
    @yasaroguzocaktan9005 Год назад +1

    Aklıma her parantez açışında recursive fonksiyon açıp duruma göre kapatmak isteyen bir kod gelmişti.
    Bu da başka bir videonun konusu :)

  • @semihartan
    @semihartan Год назад +1

    Your recursive approach is nice. And, here is my linear approach that uses one for loop. I have inspired some points from your nice code as-is, such as inline incrementing, throwing exception etc. (Because you have done the required improvements already.).
    private static string GenerateParanthesis(int length)
    {
    if (length % 2 != 0)
    throw new ArgumentException("length must be even.");
    StringBuilder stringBuilder = new StringBuilder();
    char[] parans = new char[2] { '(', ')' };
    int paranthesisIndex = 0; // 0 for open paran, and 1 for close paran.
    int openCount = 1;
    int closeCount = 0;
    int maxParan = length / 2;
    stringBuilder.Append(parans[paranthesisIndex]);
    for(int i = 1; i < length; i++)
    {
    if (openCount == maxParan)
    paranthesisIndex = 1;
    else if (openCount == closeCount)
    paranthesisIndex = 0;
    else if (openCount > closeCount)
    paranthesisIndex = Random.Shared.Next(2);
    openCount += paranthesisIndex == 0 ? 1 : 0;
    closeCount += paranthesisIndex == 1 ? 1 : 0;
    stringBuilder.Append(parans[paranthesisIndex]);
    }
    return stringBuilder.ToString();
    }

    • @TechBuddyTR
      @TechBuddyTR  Год назад +2

      If anything can be done by a loop, could be done by recursive as well :) thanks for sharing the code.

    • @semihartan
      @semihartan Год назад +1

      One note about code:
      Such a pattern that conforms the rules must be start by an open paranthesis, otherwise the pattern doesnt become valid. Therefore, we append an open paranthesis at first and start the loop from 1.

    • @TechBuddyTR
      @TechBuddyTR  Год назад +1

      @@semihartan yeah, I see that :)

  • @metin2fatihi
    @metin2fatihi 8 месяцев назад

    static readonly char[] arr = new[] { '(' , ')' };
    public static string function(int length)
    {
    string res = "";
    for(int i=0; i< length; i++)
    {
    if(i < length/2)
    res += arr[0];
    else
    res += arr[1];
    }
    return res;
    }
    public static void Main(string[] args)
    {
    Console.WriteLine(function(6));
    }
    aslında bu kadar basit ve toplamda 10 satır kod ile yapılabilecek bir kodu bu kadar detaylı ve uzun yazmanızın bir anlamı var mı?

    • @TechBuddyTR
      @TechBuddyTR  8 месяцев назад +1

      Sizin kodunuz her çalıştığında sadece '((()))' bu pattern'i üretecek. Ancak '()()()', '()(())' veya '(())()()' gibi pattern'ler de mümkün olmalı.

  • @kerimhasanyildirim
    @kerimhasanyildirim Год назад

    Ben de böyle bir çözüm yaptım ama bütün validleri alıp aralarından seçiyor. Tam olarak sorunun istediği bir yaklaşım mı emin değilim.
    public static List xd = new List();
    public static string Solve(int length)
    {
    GenerateParanthesis(0,0,length/2,"");
    int random = RandomNumberGenerator.GetInt32(xd.Count);
    return xd[random];
    }
    static void GenerateParanthesis(int open, int close, int count, string value)
    {
    if (count == close)
    {
    xd.Add(value);
    return;
    }
    if (open < count)
    GenerateParanthesis(open + 1, close,count, value + "(");
    if (close < open)
    GenerateParanthesis(open, close+1, count, value +")");
    }

  • @alper337
    @alper337 Год назад

    tesekkurler

  • @emreberkgoger6632
    @emreberkgoger6632 Год назад

    Ben stack mantığı kullanarak her açık parantez görüldüğünde listeye ekleyip kapalı parantez görüldüğünde listeden eleman silmeyi ve sonunda listede hiç eleman kalmaması gerektiğini düşünmüştüm. Sizce optimal bir yol mu ?

    • @TechBuddyTR
      @TechBuddyTR  Год назад +2

      Bu bize random parantezler vermez ki, sadece bir parantez string inin dengeli olup olmadığının cevabını verir.

    • @emreberkgoger6632
      @emreberkgoger6632 Год назад

      @@TechBuddyTR Evet ben dengeli olmasını düşünmüşüm. Teşekkür ederim.

  • @elimelimopelek
    @elimelimopelek Год назад +1

    Python ile şöyle çözdüm
    from random import randint
    def generatePatternRev01(length):
    result=""
    while len(result)

    • @feanorwasright
      @feanorwasright Год назад

      çözememişsin doğru bir output vermiyor

    • @elimelimopelek
      @elimelimopelek Год назад

      @@feanorwasright
      print(generatePatternRev01(7))
      >>> ()()()()
      Hala çalışıyor gözüküyor. Sorun yok.

    • @feanorwasright
      @feanorwasright Год назад

      @@elimelimopelek sorun var. output bu değil, mümkün olan bütün parantezleri bir liste halinde dönmeli

    • @elimelimopelek
      @elimelimopelek Год назад

      Bu mülakatın yapıldığı bir önceki videonun altında tüm olasılıkları bir array içinde dönecek şekilde yaptım, fakat doğru bulunmamıştı. Vaktin olursa bir bak, yorumunu bekliyorum.@@feanorwasright

    • @feanorwasright
      @feanorwasright Год назад

      bu soru klasiktir, leetcode generate parantheses sorusuna bak orda yüzlerce çözüm var@@elimelimopelek

  • @talhatoprak7403
    @talhatoprak7403 Год назад

    Merhaba, mülakat videosunu izledim ve gerçekten çok faydalı olduğunu düşünüyorum, ellerinize sağlık. Soruyu bende görüp kendimce bir çözüm bulmak istemiştim. Biraz daha farklı bir yaklaşım ile ilerledim aşağıda java ile kendi oluşturduğum metodu paylaşmak isterim.
    public String generatePattern(int length){
    if(length % 2 != 0)
    return "invalid request";
    if(length==2)
    return "()";
    Random random=new Random();
    Boolean randBoolean=random.nextBoolean();
    if(randBoolean){
    return "(" + generatePattern(length - 2) + ")";
    }else {
    return "()" + generatePattern(length - 2);
    }
    }

    • @hasankoc1459
      @hasankoc1459 Год назад

      Bu method rastgelelik konusunda biraz eksik gibi sanki çıktı olarak sadece "()()()" ve "((()))" gibi çıktılar verebilir.
      Soruda istenilen rastgele ve validate bir durum örnek olarak "(()())" verebilirim.

    • @talhatoprak7403
      @talhatoprak7403 Год назад +1

      @@hasankoc1459 metodun rastgelelik konusunda aslında bir eksiği yok diyebilirim. Metodu çağırdığımda aldığım çıktılar şu şekilde:
      ()(())
      (()())
      ()()
      ()(()())
      ()()()()
      (((()()(()()))))
      ()()(()()()()())
      (()(()((()(((((()((()())))))))))))

    • @hasankoc1459
      @hasankoc1459 Год назад +1

      ​@@talhatoprak7403 tekrar kontrol ettim de yanlış yorumlamışım üzgünüm :) .

  • @eppursimuovee
    @eppursimuovee 8 месяцев назад

    moralim bozuldu ya ben neden aşırı karmaşık bir şey düşündüm ki

  • @nitrogenius
    @nitrogenius Год назад +1

    Saolun hocam, sanki biraz daha Mid seviyeye yakın bir mülakat sorusu olmuş

    • @TechBuddyTR
      @TechBuddyTR  Год назад +3

      Junior için bile kolaydı bence. Türkiye standartlarında değil tabi, büyük şirketlerin mülakatlarına göre :)

  • @mustafakaraduman9281
    @mustafakaraduman9281 Год назад +1

    Ben mülakatta bunu sorsam işe alacak adam bulamam :)

    • @TechBuddyTR
      @TechBuddyTR  Год назад

      :-D Ben de anca simülasyonlarda buluyorum işte

  • @OrkhanMammadli-g4c
    @OrkhanMammadli-g4c Год назад

    string GeneratePattern(int a = 6)
    {
    Random random = new Random();
    string result = "";
    int openParanth = a/2;
    int closeParanth = a/2;
    while (result.Length < a)
    {
    double randomNumber = random.Next(2, 4);
    if (randomNumber == 3)
    {
    if (closeParanth - 1 >= openParanth)
    {
    result +=')';
    closeParanth -= 1;
    }
    else
    {
    result+='(';
    openParanth -= 1;
    }
    }
    else
    {
    if (openParanth > 0)
    {
    result += '(';
    openParanth -= 1;
    }
    }
    }
    return result;
    }