ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • git bash
  • kotiln
  • 프로그래머스
  • BFS
  • sort
  • git
  • DP
  • PriorityQueue
  • stack
  • 안드로이드
  • Arrays.sort()
  • 코틀린
  • compareTo()
  • dfs
  • getOrDefault
  • java
  • entrySet
  • HashMap
  • greedy
  • 프로그래머스 Lv.2
  • Android
  • 깃허브
  • React
  • 해시
  • 스택/큐
  • reactjs
  • Comparator
  • 백준
  • 깃
  • Queue

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

[Java] 프로그래머스 Lv.2 : 소수 찾기
Algorithm & Data Structure/프로그래머스

[Java] 프로그래머스 Lv.2 : 소수 찾기

2022. 3. 13. 14:39

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

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr

 

풀이

찾은 소수를 중복없이 저장하기 위해 자료구조로 HashSet을 사용

이미 사용했던 종이조각인지 아닌지를 확인하기위해 boolean visited[] 이용

  • 완전탐색(DFS)으로 만들 수 있는 숫자조합을 찾고 (재귀적으로 구현)
  • 소수인지 아닌지 판별한다.

마지막으로 set.size() 을 return 해준다.

전체 코드

import java.util.HashSet;
class Solution {
    static HashSet<Integer> set = new HashSet<>(); // 중복값 제거 위한 set
    static char[] arr; // 종이조각
    static boolean[] visited; // 사용여부
        
    public int solution(String numbers) {
        int answer = 0;
        arr = new char[numbers.length()];
        visited = new boolean[numbers.length()];
        
        for(int i=0; i<numbers.length(); i++){
            arr[i] = numbers.charAt(i); 
        }
                
        recursion("",0); // 재귀함수
        
        answer = set.size();
        return answer;
    }
    
    // dfs 재귀로 구현. 가능한 숫자 조합 찾고 소수면 set에 추가
    public void recursion(String str, int idx){
        //System.out.println("재귀 str:"+str+", idx: "+idx);
        int num;
        if(str!=""){
            num = Integer.parseInt(str);
            if(isPrime(num)) set.add(num); // 소수판별
        }
        if(idx==arr.length) return; // 끝까지 다했을 때 
        
        for(int i=0;i<arr.length;i++){
            if(visited[i]) continue; // 방문한 노드면 넘어감
            visited[i] = true; // 방문
            //System.out.println("for문 i:"+i+", str:"+str);
            recursion(str+arr[i], idx+1); // 방문 했을 시 재귀
            //System.out.println("for문2 i:"+i+", str:"+str);
            visited[i] = false; // 백트래킹
        }
    }//recursion
    
    // 소수 판별
    public boolean isPrime(int num){
        if(num==0||num==1) return false;
        for(int i=2; i*i<=num;i++){
            if(num%i==0) return false;
        }
        return true;
    }
    
}

 

+

이건그냥 재귀함수를 이해하려고 print문으로 확인하면서 노력했던 흔적..^^

 

저작자표시 (새창열림)

'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 Lv.2 : 타겟 넘버  (0) 2022.03.16
[Java] 프로그래머스 Lv.2 : 구명보트  (0) 2022.03.14
[Java] 프로그래머스 Lv.2 : 카펫  (0) 2022.03.13
[Java] 프로그래머스 Lv.2 : H-Index  (0) 2022.03.13
[Java] 프로그래머스 Lv.2 : 더 맵게  (0) 2022.03.13
    'Algorithm & Data Structure/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 Lv.2 : 타겟 넘버
    • [Java] 프로그래머스 Lv.2 : 구명보트
    • [Java] 프로그래머스 Lv.2 : 카펫
    • [Java] 프로그래머스 Lv.2 : H-Index
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바