본문 바로가기

Java/프로그래머스

[JAVA] 프로그래머스 - 조건에 맞게 수열 변환하기 2

https://school.programmers.co.kr/learn/courses/30/lessons/181881

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

 

두 배열을 비교하는 법 

Java - 두 배열을 비교하는 방법 (codechacha.com)

 

Java - 두 배열을 비교하는 방법

자바에서 두개의 배열이 같은지, 다른지 비교할 때 직접 비교하는 코드를 구현할 수도 있지만, Arrays 라이브러리를 이용하면 간단하게 구현할 수 있습니다. Arrays.equals()는 인자로 전달된 두개의

codechacha.com

 

1) Arrays.equals()로 일차원 배열 비교 

 

- 인자로 전달된 두 개의 일차원 배열을 비교하여 같은지 다른지 boolean으로 결과를 리턴 

import java.util.Arrays;

public class Example1 {

    public static void main(String[] args) {

        int[] first = { 1, 2, 3 };
        int[] second = { 1, 2, 3 };
        int[] third = { 1, 2, 3, 4 };

        System.out.println("first is equal to second ? "
                + Arrays.equals(first, second));

        System.out.println("first is equal to third ? "
                + Arrays.equals(first, third));

        System.out.println("first is equal to null ? "
                + Arrays.equals(first, null));
    }
}

 

 

2) Arrays.deepEquals()로 다차원 배열 비교 

 

- Arrays.deepEquals()를 사용하면 두 개의 다차원 배열이 같은지 다른지 비교할 수 있다. 

- 결과는 boolean으로 리턴된다. 

 

import java.util.Arrays;

public class Example2 {

    public static void main(String[] args) {

        int[][] first = { {1, 2, 3}, {4, 5, 6} };
        int[][] second = { {1, 2, 3}, {4, 5, 6} };
        int[][] third = { {4, 5, 6}, {1, 2, 3} };

        System.out.println("first is equal to second ? "
                + Arrays.deepEquals(first, second));

        System.out.println("first is equal to third ? "
                + Arrays.deepEquals(first, third));

        System.out.println("first is equal to null ? "
                + Arrays.deepEquals(first, null));
    }
}

 

 

정답 

 

import java.util.Arrays;

class Solution {
    public int solution(int[] arr) {
        int answer = 0;
        int count = 0;
        
        while(true)
        {
            int next[] = Arrays.copyOf(arr,arr.length);
            
            for(int i=0; i<arr.length; i++) 
            {
                if(arr[i]>=50 && arr[i]%2 == 0)
                {
                    next[i] = arr[i] /2;
                }
                else if(arr[i]<50 && arr[i]%2 ==1)
                {
                    next[i] = arr[i]*2 +1;
                }
            }
            
            if(Arrays.equals(arr,next))
                break;
            
            arr = Arrays.copyOf(next, next.length);
            answer++;
        }
        
        return answer;
    }
}

 

 

 

다른 사람의 풀이 

 

 

class Solution {
    public int solution(int[] arr) {
        int answer = 0;
        int[] next = arr.clone();
        int[] prev = arr.clone();
        boolean isDiff = false;

        while (true) {
            prev = next.clone();
            isDiff = false;

            next = new int[arr.length];

            for (int i=0; i<arr.length; i++) {
                if (prev[i] == 0) {
                    continue;
                }
                if (prev[i] >= 50 && prev[i] % 2 == 0) {
                    next[i] = prev[i] / 2;
                } else if (prev[i] < 50 && prev[i] % 2 == 1) {
                    next[i] = prev[i] * 2 + 1;
                } else {
                    next[i] = prev[i];
                }
                if (prev[i] != next[i]) {
                    isDiff = true;
                }
            }

            if (isDiff) {
                answer++;
            } else {
                return answer;
            }

        }
    }
}