가이버2
개발 블로그
가이버2
전체 방문자
오늘
어제
  • 분류 전체보기 (171)
    • 교육 (115)
      • 백엔드 (14)
      • 프론트 (2)
      • 네트워크 관련 (4)
      • 데이터 관련 (3)
      • devops (3)
      • 그외 (3)
      • 알고리즘 (5)
      • 코테 (81)
    • 디버깅 (3)
      • 스프링 Data JPA (3)
      • JAVA (0)
    • 개발 편의 (8)
    • 기계 (24)
      • NAS (9)
      • ROUTER (0)
      • 맥북 (15)
    • 소프트웨어 (17)
      • WIN (4)
      • MAC (13)
      • LINUX (0)
    • 생활 (0)
      • 구매 (0)
      • 오월이 (0)
    • 링크 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • naelonambul 개발 블로그 입니다.

인기 글

태그

  • 가상화
  • 코딩테스트
  • SQL
  • WSL
  • 스프링
  • 윈도우
  • 맥
  • 인프런
  • 맥북
  • M1
  • 프로그래머스
  • JS
  • M4
  • Spring
  • Java
  • 맥미니
  • ARM
  • 시놀로지
  • intellij
  • SSD

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
가이버2

개발 블로그

교육/코테

[프로그래머스]JAVA 소수찾기 -완전 탐색

2022. 7. 7. 17:42

참고 :

  백트레킹 유튜브  : https://youtu.be/Enz2csssTCs?t=457 

 

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42839

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;
import java.util.stream.Collectors;

public class Solution {
  public int solution(String numbers) {
    int answer = 0;

    //초기값 세팅
    String[] split = numbers.split("");
    //변수 사용 현황
    boolean[] isUsed = new boolean[numbers.length()];
    Arrays.fill(isUsed, false);
    //변수 리스트화
    List<String> collect = Arrays.stream(split)
            .collect(Collectors.toList());
    //셋 초기화, 소수 중복 고려
    Set<Integer> primes = new HashSet<>();
    for(int i=0; i<numbers.length(); i++){
      backtrack(i, new StringBuffer(), collect,numbers.length(), isUsed, primes);
    }
      
    answer = primes.size();
    return answer;
  }

  //isPrime
  public boolean isPrime(int n) {
    if(n <= 1) return false;
    for(int j=2; j*j<n+1; j++){
      if(n%j==0) return false;
    }
    return true;
  }

  //backtracking
  public void backtrack(int depth, StringBuffer number, List<String> collect,int length, boolean[] isUsed, Set<Integer> primes){
    if(depth == length){
      //마지막 숫자 추출
      Integer fNumber = Integer.valueOf(number.toString());
      //소수 판별후 셋에 추가
      if(isPrime(fNumber)) primes.add(fNumber);
      return;
    }

    for(int i=0; i<length; i++){
      if(isUsed[i]) continue;
      isUsed[i] = true;
      backtrack(depth+1, new StringBuffer(number).append(collect.get(i)), collect, length, isUsed, primes);
      isUsed[i] = false;
    }
  }
}

'교육 > 코테' 카테고리의 다른 글

[프로그래머스]JAVA 조이스틱 -탐욕  (0) 2022.07.08
[프로그래머스]JAVA 카펫 -완전탐색  (0) 2022.07.07
[프로그래머스]JAVA H-Index -정렬  (0) 2022.07.07
[프로그래머스]JAVA 가장 큰 수 -정렬  (0) 2022.07.07
[프로그래머스]JAVA 이중우선순위큐 -힙  (0) 2022.07.07
    '교육/코테' 카테고리의 다른 글
    • [프로그래머스]JAVA 조이스틱 -탐욕
    • [프로그래머스]JAVA 카펫 -완전탐색
    • [프로그래머스]JAVA H-Index -정렬
    • [프로그래머스]JAVA 가장 큰 수 -정렬
    가이버2
    가이버2
    개인 개발 블로그 입니다.

    티스토리툴바