ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • algorithm
    자바 알고리즘 - A로 B 만들기
    2023. 9. 6. 10:53
    728x90

    문제 설명

    문자열 beforeafter가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.

     

    제한 사항

    • 0 < before의 길이 == after의 길이 < 1,000
    • before와 after는 모두 소문자로 이루어져 있습니다.

     

    답안

    import java.util.*;
    
    class Solution {
        public int solution(String before, String after) {
    
            String[] arrB = before.split("");
            String[] arrA = after.split("");
    
            Arrays.sort(arrB);
            Arrays.sort(arrA);
    
            for(int i=0; i<arrB.length; i++) {
                if(!arrA[i].equals(arrB[i])) {
                    return 0;
                }
            }
            return 1;
        }
    }

    순서를 어떻게 바꿔야하나 고민하다가 두 문장 다 정렬 했을 때 모든 원소가 동일해야 한다는걸 깨달았다.

    그래서 두 문장 모두 split()을 이용해서 String 배열로 만든 다음 Arrays.sort() 통해 원소를 정렬한다.

    그리고 for문을 돌면서 원소를 비교하고 만약 다르다면 0를 리턴하고 for문을 빠져나오면 1을 리턴한다.

    근데 for문을 돌지 않고도 답을 도출해내는 방법도 있다.

    import java.util.*;
    
    class Solution {
        public int solution(String before, String after) {
    
            String[] arrB = before.split("");
            String[] arrA = after.split("");
    
            Arrays.sort(arrB);
            Arrays.sort(arrA);
    
    
            return String.join("", arrB).equals(String.join("",arrA))? 1:0;
        }
    }

    배열로 만들어서 정렬하는 것까진 동일하지만 정렬된 배열을 String 타입으로 변환하여 동일 유무를 파악한다.

    만약 동일하다면 1, 다르다면 0을 리턴한다.

     

    참고

    • 문자열.split(구분자) : 문자열을 입력한 구분자에 따라 구분하여 배열로 반환, 구분자가 없는 경우 한글자씩 떼서 배열로 반환
    • Arrays.sort(배열) : 배열을 오름차순으로 정렬
    • 문자열.eqauls(문자열) : 두개의 문자열의 값을 비교하여 동일하면 true, 다르다면 false를 리턴
    • String.join("사이에 넣을 문자열", 배열) : 배열 원소 사이 사이에 입력한 문자열을 넣어 하나의 문자열로 리턴
    728x90
Designed by Tistory.