• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

54번 문제 문의입니다.

20.06.07 15:49 작성 조회수 65

0

강의에 따르면 정답 코드는 아래와 같습니다.

const hojunSolution = (l) => {
    l.sort((a, b) => {
        return a - b;
    });
  
    for (let i = 0; i <= l.length - 1; i++){
        if (l[i] + 1 !== l[i + 1]){
            return 'NO';
        } else {
            return 'YES';
        }
    }
};
console.log(hojunSolution('1 2 3 4 5 9 6'.split(' ').map(n => parseInt(n, 10)))); // YES

하지만 문제대로라면  1 2 3 4 5 9 6은 7과 8이 누락되어 연속숫자가 아니므로 NO가 나와야하는데 로그찍어보면 YES가 나오고 있습니다. 제가 만든 코드는 아래와 같습니다. 이렇게 되어야 맞는 정답이 아닐까요?

const mySolution = (arr) => {
    for (let i = 0; i < arr.length - 1; i++) {
        if (Math.abs(arr[i + 1] - arr[i]) !== 1) {
            return 'NO';
        }
    }
    return 'YES';
};
console.log(mySolution([1, 4, 3, 2, 6])); // NO
console.log(mySolution([1, 2, 3, 4, 5])); // YES
console.log(mySolution([1, 2, 1, 2, 3])); // YES

답변 1

답변을 작성해보세요.

0

안녕하세요, 국민대소프트웨어학부_최락준님 :)

우선 답변이 늦어진 점 죄송합니다.

최락준님이 주신 질문 확인 후 문제 풀이와 정답 코드에서 실수가 발견되었습니다. 죄송합니다.
정답 코드는 수정하도록  하겠습니다.

아래 코드처럼 i <= l.length - 1 를 i < l.length - 1 와 같이 수정하고
return 'YES'를 else문이 아닌 for문 밖으로 빼야합니다.


최락준님이 작성하신 코드처럼 문제를 푸는 것도 가능하지만,  54번 문제는 문제 출력 예시에서 나온 것과 같이
스탬프에 적힌 숫자가 연속된 수인지 판별하는 프로그램을 작성하는 문제입니다.

예를 들어 배열이 [1, 4, 3, 2, 5] 일 때도 1부터 5까지 연속된 수의 집합이기 때문에 YES가 나와야합니다.
또 [1, 2, 1, 2, 3]에서는 1, 2가 중복되어 있기 때문에 실행하면 NO가 나오게 됩니다.

답변이 충분하지 않거나 이해가 안 되는 부분이 있다면 언제든지 질문 부탁드립니다.

감사합니다.