A로 B 만들기

nacSeo (낙서)·2024년 5월 16일
0

프로그래머스

목록 보기
168/169

문제 설명

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

제한사항

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

나의 코드

  • 첫 번째 코드
import java.util.Arrays;

class Solution {
    public int solution(String before, String after) {
        int answer = 0;
        char[] charArr = before.toCharArray();
        char[] charArr2 = after.toCharArray();
        for(int i=0; i<before.length()-1; i++) {
            char temp = charArr[i];
            charArr[i] = charArr[i+1];
            charArr[i+1] = temp;
            if(Arrays.equals(charArr, charArr2)) {
                answer = 1;
                break;
            }
        }
        return answer;
    }
}

테스트1을 통과시키려 노력했는데 첫 번째 방법은 결국 실패 ,, 다른 방법을 찾아보기로 했다.

  • 최종 코드
import java.util.Arrays;

class Solution {
    public int solution(String before, String after) {
        int answer = 0;
        char[] beforeArr = before.toCharArray();
        char[] afterArr = after.toCharArray();
        Arrays.sort(beforeArr);
        Arrays.sort(afterArr);
        
        answer = Arrays.equals(beforeArr, afterArr) ? 1:0;
        return answer;
    }
}

다른 사람 코드

class Solution {
    public int solution(String before, String after) {
        for(int i = 0; i < before.length(); i++){
            after = after.replaceFirst(before.substring(i,i+1),"");
        }
        return after.length() == 0? 1: 0;
    }
}

replaceFirst() 메소드 활용

느낀 점

처음 생각한 방법은 before 문자열을 배열로 바꿔 반복문으로 인덱스를 돌면서 앞 뒤값을 바꿔주면서 after와 같은 값이 나오면 answer를 1로 바꾸고 break시키려 하였다. 계속 시도하였으나 실패 (아마 이중 반복문을 사용해야 했다...) 좀 더 편리한 방법을 찾다가 단순히 주어진 문자열을 char 배열로 바꾸어 정렬시켜 비교하는 방법으로 해결하였다!
다른 사람 방법과 같이 replaceFirst()메소드를 활용하여 해결하는 방법도 존재했다.

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글