마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

java 고수 님들 문제가 너무 어렵습니다

0 추천

단순히 소수 판별이 아니라... 양옆의 수들 합이 모두 소수일 떄를 정렬 시켜서 출력해야 하는건데....

도대체 어떻게 접근해야 할지를 모르겠습니다 도움 좀 부탁드립니다 ㅜㅜ

ㅇㅇ 님이 2016년 9월 18일 질문
혹시 답을 가지고 계시나요? 그러시다면 다른 것들도 한번 보여주세요. prime number는 odd와 even number가 번갈아 가면서 나오면 되는데, 다른 것들도 보여주시면 패턴을 찾기에 좀 도움이 되지 않을까 해서요. 문제가 생각보다 어렵네요.

3개의 답변

0 추천
정답은 아니지만, 인접한 두개의 수가 둘다 짝,홀 로 이루어지지 않으면 무조건 2로 나누어지게 되있습니다.

우선 숫자를 배열할때 짝,짝 또는 홀,홀 의 경우를 제외하고, 1이 고정이니까 우선 1을 기점으로 양 옆과의 합을

구하고 소수인지 체크 해서 제외하는 식으로 순서대로 경우를 제거하면 될거같습니다.
라이언인데왜 (550 포인트) 님이 2016년 9월 19일 답변
0 추천
풀이방법이 굉장히 많겠지만

기본적으로 문제에서 16보다 작은 짝수이므로

가장 큰값은 14이겠네요

이것을 알면 어찌됬던 인접한 두수의 최대값은 14+13=27이겠죠

27이하의 소수를 모두 구한후에 값을 저장해놓고

(더한값이 위 값에 포함되는지 무한루프 돌리면 될거 같네요)

원은 솔직히 볼 필요없고

(다 구한다음에 1빼고 순서 바꾸면 되는.. )
익명사용자 님이 2016년 9월 19일 답변
2016년 9월 19일 수정
0 추천
public class PrimeUtil {

    public static final List<Integer> PRIMES = Arrays.asList(1,2,3,5,7,11,13,17,19,23,27);

    private Set<List<Integer>> result = new HashSet();

    public Set<List<Integer>> getResult() {
        return result;
    }

    public void run(int n){
        result.clear();

        List<Integer> numbers = new ArrayList();
        for (int i=1; i<=n; i++) {
            numbers.add(i);
        }

        permute(numbers, 1);

        printResult();
    }

    public void printResult(){
        for (List<Integer> list : result)
            System.out.println(Arrays.toString(list.toArray()));
    }

    private void permute(List<Integer> list, int k){
        for (int i=k; i<list.size(); i++) {
            Collections.swap(list, i, k);
            permute(list, k+1);
            Collections.swap(list, i, k);
        }

        if (k == list.size()-1) {
            if (verifyPrimes(list)) {
                result.add(list);
            }
        }
    }

    public static boolean verifyPrimes(List<Integer> list) {
        for (int i=0; i<list.size()-1; i++){
            int odd = list.get(i);
            int even = list.get(i+1);

            if (!isPrime(odd + even)) {
                return false;
            }
        }

        return true;
    }

    public static boolean isPrime(int i) {
        return PRIMES.contains(i);

    }

   public static void main(String[] args) {
        if (args.length==0) {
             System.out.println("Usage: ava PrimeUtil [even number] java PrimeUtil 6");
             return;
        }
   
       boolean isValidArg = false;
       try {
             int n = Integer.pareInt(args[0]);
             isValidArg = (n<16 && n%2 ==0);
        } catch (NumberFormatException e) {
             
        }
        
        if (!isValidArg) {
            System.out.println("Argument should be an even number less than 16.");
            return;
        }      
       
        PrimeUtil util = new PrimeUtil();
        util.run(n);
   }
}

 

익명사용자 님이 2016년 9월 22일 답변
...