본문 바로가기
CodingTest/Programmers

[프로그래머스] Lv.0 A로 B 만들기

by yoondoo 2022. 12. 1.
728x90
class Solution {
    public int solution(String before, String after) {
        for(int i=0; i<before.length(); i++) {
            after=after.replaceFirst(""+before.charAt(i), "");
        }
        if(after.equals("")) return 1;
        else return 0;
    }
}

처음에 문제를 접근할 때 before를 뒤집었을 때 after가 나와야 정답인줄 알고 StringBuilder의 reverse()메서드를 사용해서 풀었다가 몇개의 테스트케이스가 통과되지 않았다.

다시 문제를 읽어보니 뒤집은게 아니라 '순서'를 바꿨을 때 같은 문자열이 되는지 물어보는 문제여서 접근 방식을 바꿨다.

 

before의 문자열에서 문자 하나씩을 가져와 replaceFirst()메서드를 이용해 after에 같은 문자가 있으면 앞에서 부터 하나만 지우는걸 before의 문자열 길이 만큼(문제 조건에서 before와 after의 문자열 길이는 동일)반복한다.

만약 after의 문자열에 남은게 없으면 before와 동일한 문자열이기 때문에 1을 출력 하나라도 남아있으면 순서를 바꿔도 동일하지 않기 때문에 0을 반환했다.

 

다른 좋은 문제풀이 방법이 있어서 다른 풀이로 접근해봤다.

import java.util.*;
class Solution {
    public int solution(String before, String after) {
        
        char[] a = before.toCharArray();
	char[] b = after.toCharArray();
		
	Arrays.sort(a);
	Arrays.sort(b);

        return new String(a).equals(new String(b)) ? 1 : 0;
        
    }
}

before와 after 문자열을 char배열로 변환하고 변환한 배열을 정렬해서 같은지 비교해버리면 간단....

그래도 한번도 안써봤던 replaceFirst를 써봤단거에 만족!

반응형

댓글