(Java) 프로그래머스 - 숫자 블록

2022. 8. 12. 03:54·코딩 테스트

간단한 문제처럼 보였지만 그렇게 쉽지는 않았다.

이중 for문으로 배열을 조작하면서 풀어보았는데

begin 값이 1일때는 정상적으로 답이 나오지만

1이 아닐경우에는 답이 정상적으로 나오지 않았다.

이런 저런 시도끝에 성공하지 못해서 검색을 통해 힌트를 얻었다.

 

begin 부터 end 까지 각 블록이 먼저 소수인지 판별하여

소수라면 배열 idx에 1을 삽입하고

소수가 아니라면 가장 큰 약수를 삽입한다.

블록의 최대 개수가 10000000 이므로

약수가 10000000 이하 조건을 넣지 않으면 효율성 테스트에서 걸리게 된다.

 


실패 코드

class Solution {
    public int[] solution(long begin, long end) {
        int beginInt = (int) begin;
        int endInt = (int) end;
        int[] answer = new int[(endInt - beginInt + 1)];
        int idx = 0;
        
        for (int i = 1; i * 2 <= end; i++) {
            for (int j = 2; i * j <= end - begin + 1; j++) {
                answer[(i * j - 1)] = i;
            }
        }

        return answer;
    }
}

 

최종 코드

class Solution {
    public int[] solution(long begin, long end) {
        int beginInt = (int) begin;
        int endInt = (int) end;
        int[] answer = new int[(endInt - beginInt + 1)];
        int idx = 0;

        for (int i = beginInt; i <= endInt; i++) {
            // 소수 판별을 위한 변수
            boolean flag = false;

            // i가 1이면 지나감
            if(i == 1) {
                answer[idx++] = 0;
                continue;
            }

            // 에라토테네스의 채로 소수인지 판별
            for (int j = 2; j * j <= i; j++) {
                // 소수가 아니고 약수가 10000000 이하라면
                if (i % j == 0 && i / j <= 10000000) {
                    // 가장 큰 약수 삽입
                    answer[idx++] = i / j;
                    flag = true;
                    break;
                }
            }

            // 소수라면 1 삽입
            if(!flag) {
                answer[idx++] = 1;
            }
        }

        return answer;
    }
}

'코딩 테스트' 카테고리의 다른 글

(Java) 프로그래머스 - 하노이의 탑  (0) 2022.08.18
(Java) 프로그래머스 - N-Queen  (0) 2022.08.13
(Java) 프로그래머스 - 배달  (0) 2022.08.09
(Java) 백준 9934 - 완전 이진 트리  (0) 2022.08.04
(Java) 프로그래머스 - 멀리뛰기  (0) 2022.08.04
'코딩 테스트' 카테고리의 다른 글
  • (Java) 프로그래머스 - 하노이의 탑
  • (Java) 프로그래머스 - N-Queen
  • (Java) 프로그래머스 - 배달
  • (Java) 백준 9934 - 완전 이진 트리
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 프로그래머스 - 숫자 블록
상단으로

티스토리툴바