본문 바로가기

코딩/알고리즘

백준) 1816 - 암호키 JS

📌 문제 링크

https://www.acmicpc.net/problem/1816


📌 문제 탐색하기

  • 주어진 수의 소인수가 1,000,000보다 크다면 적절한 비밀번호이다. 적절한 비밀번호라면 "YES"를 아니라면 "NO"를 출력해라

시간복잡도

  • O(n⋅k)

알고리즘 선택

  • 완전탐색

📌 코드 설계하기

  1. 문제의 `input`을 개행으로 분리하여 BigInt로 변환하고 구조분해할당 합니다.
  2. `arr` 배열을 순회합니다.
  3. 소수인지 약수인지 확인하기 위한 `isPrime` 변수를 초기화합니다.
  4. 2부터 1,000,000까지 순회하면서 값이 나뉘는지 확인합니다.
    1. 나뉜다면 "NO"를 출력하고 `isPrime`을 `false`로 할당하고 `break` 합니다.
  5. `isPrime`이 `true`라면 "YES"를 출력합니다.

📌 시도 회차 수정 사항 (Optional)

1회차

  • flag인 `isPrime`을 넣지 않아서 if문을 빠져나온 다음 바로 "YES"를 출력했다.

📌 정답 코드

//https://www.acmicpc.net/problem/1816
export {};

const fs = require("fs");
const filePath =
  process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const [_, ...arr] = fs
  .readFileSync(filePath)
  .toString()
  .trim()
  .split("\n")
  .map(BigInt);

for (const x of arr) {
  let isPrime = true;
  for (let i = 2n; i <= 1000000n; i++) {
    if (x % i === 0n) {
      console.log("NO");
      isPrime = false;
      break;
    }
  }
  if (isPrime) console.log("YES");
}

'코딩 > 알고리즘' 카테고리의 다른 글

백준) 10773 - 제로 JS  (0) 2024.11.27
백준) 1157 - 단어 공부 JS  (0) 2024.11.25
백준) 2417 - 정수 제곱근 JS  (0) 2024.11.24
백준) 1920 - 수 찾기 JS  (0) 2024.11.23
백준) 1904 - 01타일 JS  (0) 2024.11.22