[백준 1038번 문제, JAVA] 제곱 ㄴㄴ 수

2023. 2. 26. 23:08·정리 전 게시글/공부 관련

문제


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");

        long min = Long.parseLong(input[0]);
        long max = Long.parseLong(input[1]);

        boolean[] eratosthenes = new boolean[(int) (max - min + 1)];

        for (long i = 2; i <= Math.sqrt(max); i++) {
            long square = i * i;
            long start = min % square == 0 ? min / square : min / square + 1;
            for (long j = start; j * square <= max; j++) {
                if (j * square >= min) {
                    eratosthenes[(int) (j * square - min)] = true;
                }
            }
        }

        int answer = 0;
        for (boolean b : eratosthenes) {
            if (!b) {
                answer++;
            }
        }

        System.out.println(answer);
        br.close();
    }
}

해결

솔직히 챗gpt랑 tabnine이 90퍼는 다풀었음

 

1. long 형식의 인덱스를 사용하는 배열을 사용하려면 어떻게 해야하나 -> boolean[] 배열을 사용하면 됩니다

아니 왜 처음부터 이걸 쓸생각을 안했지

 

2. 시작 인덱스가 에러가 나는거같에 ->

long start = min % square == 0 ? min / square : min / square + 1;

이렇게 쓰면 확정적으로 배수의 처음 시작하는 숫자로 받을 수 있습니다

 

....

진짜 프로그래머 못해먹겠네 ㅋㅋㅋㅋ


솔찌 내가 생각한 방법

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");

        long min = Long.parseLong(input[0]);
        long max = Long.parseLong(input[1]);

        HashMap<Long, Boolean> hash = new HashMap<>();

        for (long i = min; i <= max + 1; i++) {
            hash.put(i, true);
        }

        for (long i = 2; i <= Math.sqrt(max); i++) {
            long square = i * i;
            long start = min % square == 0 ? min / square : min / square + 1;
            if(hash.get(start)) {
                for (long j = start; j * square <= max; j++) {
                    hash.put(j * square - min, false);
                }
            }
        }

        int answer = 0;
        for (Map.Entry<Long, Boolean> entry : hash.entrySet()) {
            if (entry.getValue()) {
                answer++;
            }
        }

        System.out.println(answer);
        br.close();
    }
}

사실 이것도 탭나인이 거의 도와준거긴 한데

처음에는 ArrayList로 풀려다가 인덱스에는 Integer 형식만 올 수 있다고 해서 그러면 해쉬를 쓰는 방법은 안되려나 하고 이걸로 해봤는데 이것도 최대 개수에는 Integer 개수만큼만 되나보다 엄청 많은 수가 오면 이전의 수가 사라지는듯 그래서 널포인터 에러가 발생한다

 

그래서 틀렸습니다~


참고

https://youtu.be/9rLFFKmKzno?t=402 

 

 

 

저작자표시 (새창열림)

'정리 전 게시글 > 공부 관련' 카테고리의 다른 글

[자바 JAVA] Server Socket 소켓 통신 한글 깨짐 해결 BufferedReader, InputStreamReader, PrintWriter, OutputStreamWriter.... JDK한글깨짐, 자바한글깨짐  (0) 2023.02.28
[백준 1003번 문제, JAVA] 피보나치 함수  (0) 2023.02.27
[백준 1085번 문제, JAVA] 직사각형에서 탈출  (0) 2023.02.26
[백준 1004번 문제, JAVA] 어린 왕자  (0) 2023.02.25
[백준 1001번 문제, JAVA] A-B  (0) 2023.02.25
'정리 전 게시글/공부 관련' 카테고리의 다른 글
  • [자바 JAVA] Server Socket 소켓 통신 한글 깨짐 해결 BufferedReader, InputStreamReader, PrintWriter, OutputStreamWriter.... JDK한글깨짐, 자바한글깨짐
  • [백준 1003번 문제, JAVA] 피보나치 함수
  • [백준 1085번 문제, JAVA] 직사각형에서 탈출
  • [백준 1004번 문제, JAVA] 어린 왕자
aptenia
aptenia
공부하면서 배운 것들
  • aptenia
    새벽의 아이디어
    aptenia
  • 전체
    오늘
    어제
    • 분류 전체보기 (277) N
      • f1tenth (2)
      • 개발 관련 아무거나 (1) N
      • 정리 전 게시글 (268)
        • 개발 관련 (25)
        • 정보 관련 (19)
        • 공부 관련 (224)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 네이버 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C언어강좌
    c언어초보
    파이썬
    티스토리반응형2스킨편집
    마인크래프트
    마크스크립트
    캡스톤디자인
    일본규슈공업대학교
    파이어베이스
    이것이자바다
    컨텍스트스위칭
    C++강좌
    마크
    C언어
    이것이자바다연습문제
    이것이자바다확인문제
    마인크래프트강화스크립트
    빅데이터공모전
    프로그래머스PCCE
    스크롤바CSS
    자바
    백준
    티스토리HTML
    티스토리스킨편집
    안드로이드
    콜라츠추측
    마인크래프트스크립트
    프로그래머스
    공개SW개발자대회
    반복하지않는수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
aptenia
[백준 1038번 문제, JAVA] 제곱 ㄴㄴ 수
상단으로

티스토리툴바