초보자를 위한 5가지 가장 어려운 코드 챌린지

Coderbyte에서는 코딩을 배우고 연습 방법이 필요한 초보자에게 완벽한 약 100가지 쉬운 코드 챌린지를 제공합니다. 우리는 이러한 챌린지에 대한 통계를 살펴보았고 사용자가 완벽한 점수를 얻기 위해 가장 애를 썼던 챌린지를 찾았습니다. 우리는 쉬운 섹션에 나열된 5개의 가장 어려운 문제를 찾기 위해 모든 쉬운 문제의 범위를 좁혔습니다. 여기서 쉬움이란 초보자 코더가 15-25분 사이에 해결할 수 있는 문제를 의미합니다.

가장 어려운 초보자 도전


  • Question Marks : 문자열을 반복하고 특정 조건이 충족되는지 확인해야 합니다.
  • Vowel Square : 더 큰 행렬에서 2x2 정사각형 모음을 찾아야 합니다.
  • Scale Balancing : 저울이 완벽하게 균형을 이룰 수 있는지 확인하기 위해 가중치 배열을 반복해야 합니다.
  • Correct Path : NxN 행렬에서 부분적으로 완료된 경로를 통과하고 경로를 완료해야 합니다.
  • Closest Enemy II : NxM 행렬의 특정 점 사이의 거리를 확인해야 합니다.

  • 이 중 사용자가 만점을 받기 위해 가장 고군분투하고 가장 오랜 시간을 해결한 과제는 물음표다.

    챌린지 설명



    입력 문자열 매개변수를 사용하여 10이 되는 모든 숫자 쌍 사이에 정확히 3개의 물음표가 있는지 확인합니다. 그렇다면 true를 반환하고 그렇지 않으면 false를 반환합니다. 몇 가지 테스트 사례는 다음과 같습니다.

    "arrb6???4xxbl5???eee5" => true
    "acc?7??sss?3rr1??????5" => true
    "5??aaaaaaaaaaaaaaaaaaa?5?5" => false
    "9???1???9???1???9" => true
    "aa6?9" => false
    

    더 읽기 전에 이 문제를 어떻게 해결할지 생각해 보십시오.

    분석



    이 문제를 해결하려면 여러 계층의 논리가 필요하므로 처음에는 솔루션을 찾는 것이 어려울 수 있습니다. 문자열을 반복하고 10이 되는 모든 숫자 쌍의 위치를 ​​유지해야 합니다. 합이 10이 되는 두 숫자를 찾은 경우 이 두 인덱스 사이 어딘가에 정확히 3개의 특정 문자가 있는지 확인해야 합니다. .
  • JavaScript로 솔루션을 제출한 사용자의 68%가 만점을 받지 못했습니다.
  • Ruby에서 솔루션을 제출한 사용자의 35%가 만점을 받지 못했습니다.
  • 솔루션의 평균 라인 수는 15–29입니다.

  • 샘플 솔루션



    다음은 Coderbyte에서 13위에 랭크된 사용자Qlogin가 Python으로 작성한 매우 간결하고 우아한 솔루션입니다.

    def QuestionsMarks(s):
      qnum = 0
      dig = 0
      has_10 = False
      for ch in s:
        if ch.isdigit():
          if int(ch) + dig == 10:
            if qnum != 3:
              return 'false'
            has_10 = True
          dig = int(ch)
          qnum = 0
        elif ch == '?':
          qnum += 1
      return 'true' if has_10 else 'false'
    

    문제를 해결하기 위해 Java로 구현된 user on Coderbyte 영리한 정규식 솔루션도 있습니다.

    public static String QuestionsMarks(String str) { 
    
      str = str.replaceAll("[a-z]+","");
      Pattern pattern = Pattern.compile("([0-9])([?])([?])([?])([0-9])");
      Pattern pattern01 = Pattern.compile("([0-9])([?])([?])([0-9])");
      Matcher matcher01 = pattern01.matcher(str);
      Pattern pattern02 = Pattern.compile("([0-9])([?])([0-9])");
      Matcher matcher02 = pattern02.matcher(str);
      Matcher matcher = pattern.matcher(str);
    
      if (matcher01.find() || matcher02.find()) {
        return "false";
      } else if (matcher.find()) {
        return "true";
      }
    
      return "false";
    
    }
    

    Coderbyte에서 스스로 도전 과제를 시도하고 샘플 솔루션에 대해 어떻게 생각하는지 아래에 댓글로 남겨주세요!

    이 기사는 원래 Medium 에 게재되었습니다.

    좋은 웹페이지 즐겨찾기