문제 설명
문자열 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()
메소드를 활용하여 해결하는 방법도 존재했다.