초보자를 위한 5가지 가장 어려운 코드 챌린지
가장 어려운 초보자 도전
이 중 사용자가 만점을 받기 위해 가장 고군분투하고 가장 오랜 시간을 해결한 과제는 물음표다.
챌린지 설명
입력 문자열 매개변수를 사용하여 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개의 특정 문자가 있는지 확인해야 합니다. .
"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개의 특정 문자가 있는지 확인해야 합니다. .
샘플 솔루션
다음은 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 에 게재되었습니다.
Reference
이 문제에 관하여(초보자를 위한 5가지 가장 어려운 코드 챌린지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/coderbyte/the-5-hardest-code-challenges-for-beginners-5flc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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'
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";
}
Reference
이 문제에 관하여(초보자를 위한 5가지 가장 어려운 코드 챌린지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/coderbyte/the-5-hardest-code-challenges-for-beginners-5flc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)