인프런 커뮤니티 질문&답변

탱_님의 프로필 이미지
탱_

작성한 질문수

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

완전탐색 (For반복문)

백준 1816 Javascript

해결된 질문

작성

·

271

1

로컬 테스트에서는 잘 동작되는데, 백준에서는 계속 '틀렸습니다' 오답 상태입니다
JS 문법상 고려해야할 사항을 빼먹은 건지, 어떤 다른 테스트 케이스의 경우를 고려 못한 건지 모르겠네요🥺

답변 2

2

코딩 센세님의 프로필 이미지
코딩 센세
지식공유자

const fs = require('fs')
const filePath = process.platform === 'linux' ? '/dev/stdin' : `${__dirname}/input.txt`

const input = fs.readFileSync(filePath).toString().trim().split('\n').map(BigInt);
const n = parseInt(input.shift(), 10);
for (let index = 0; index < n; index++) {
    const tc = input[index];
    let isAppropriate = true; // 적절한 암호 키인지 여부를 판단하는 변수

    // 1,000,000까지 반복하여 소인수가 있는지 검사
    for (let i = 2n; i <= 1000000n; i++) {
        if (tc % i === 0n) {
            console.log("NO");
            isAppropriate = false
            break;
        }        
    }
    if(isAppropriate) {
        console.log("YES")
    }
}

 

제가 자바스크립트 코딩테스트를 정말로 처음봐서 일단 정답 코드중에 node.js로 되어있는 친구를 하나 가져와봤습니다! 혹시 이걸 보면 참고가 조금 되실까요? 보시고 괜찮으시거나, 봐도 이해하기 힘드시다면 일단 답글 달아주세요! 제가 조금 더 공부해서 찾아보겠습니다!

코딩 센세님의 프로필 이미지
코딩 센세
지식공유자

아마도 ==가 아니라 ===로 고치면 해결이 되는 문제일 수도 있겠네요..!

0

안녕하세요, 인프런 AI 인턴입니다.

문제의 설명을 바탕으로 백준에서 ‘틀렸습니다’의 원인을 추측해보자면, 몇 가지 요소가 고려되어야 할 것 같습니다.

  1. 입력 처리: 백준 문제에서 입력은 대부분 표준 입력(stdin)을 통해 이루어집니다. 로컬 환경에서 파일을 읽는 방식(fs 모듈 사용)과 다르게, 백준 환경에서는 readline 모듈이나 fs 모듈을 사용하여 '/dev/stdin'을 직접 읽는 방식을 사용해야 할 수 있습니다. 로컬 환경과 백준 환경에서의 입력 처리 방식 차이를 고려해보셨는지 확인해 보시길 바랍니다.

  2. 효율성 문제: 주어진 숫자가 소수인지 판별할 때, 가능한 모든 수(2부터 1,000,000까지)를 확인하는 것은 비효율적입니다. 소수 판별은 주어진 숫자의 제곱근까지만 확인하면 충분합니다. 예를 들어, element의 제곱근까지만 반복문을 실행하여 소수를 판별하도록 코드를 변경해보세요.

  3. 특정 테스트 케이스 고려: 제시된 코드에서는 모든 경우를 잘 처리하는지 확인하기 위해, 가장 작은 소수(2)나 큰 범위의 수에 대해서도 올바르게 동작하는지 검토해볼 필요가 있습니다. 또한, N이 0인 경우나 입력 배열 arr이 비어 있는 경우 등, 예외적인 상황에 대한 처리가 있는지도 확인해 보시기 바랍니다.

로컬 테스트와 백준 환경에서의 차이점을 이해하고, 효율성 및 예외 상황에 대한 처리를 점검해 보시길 권장드립니다.

문제 코드 스크린샷

이러한 수정 사항을 적용해보시고, 문제의 해결을 위한 추가적인 질문이 있으시면 언제든지 질문해주세요.

탱_님의 프로필 이미지
탱_

작성한 질문수

질문하기