/ ALGORITHM

A로 B 만들기

Algorithm 관련 포스팅

이 글은 프로그래머스의 A로 B 만들기의 풀이를 정리한 것입니다.

문제 설명

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


제한사항

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

입출력 예

before after result
“olleh” “hello” 1
“allpe” “apple” 0

입출력 예 설명

입출력 예 #1

  • “olleh”의 순서를 바꾸면 “hello”를 만들 수 있습니다.

입출력 예 #2

  • “allpe”의 순서를 바꿔도 “apple”을 만들 수 없습니다.

나의 풀이(1)

  1. after의 길이 만큼 for문을 돎
  2. replaceFirst()를 사용해 before의 문자 중 after에 있는 처음 만나는 공통 문자를 ""로 교체

    replace()의 경우, 해당 문자를 모두 바꾸어버림

     String replaceFirst(String regex, String replacement)
    
  3. before에 있는 문자열이 after에도 모두 있다면 replaceFirst()의 결과는 공백("")이며, before에 있는 문자열이 after에 모두 있지 않다면 미처 지워지지 않은 문자열이 반환됨
class Solution {
    public int solution(String before, String after) {
        int answer = 0;
        
        // 1.
        for (int i = 0; i < after.length(); i++) {
            // 2.
            before = before.replaceFirst(String.valueOf(after.charAt(i)), "");
        }
        
        // 3.
        if (before.equals("")) answer = 1;
        else answer = 0;
        
        return answer;
    }
}

나의 풀이(2)

  1. before과 after의 문자열을 toCharArray()문자 배열로 전환
  2. 문자 배열을 sort()오름차순 정렬
  3. 두 배열을 String 생성자를 이용해 문자열로 전환 후 동일 여부 파악
import java.util.Arrays;

class Solution {
    public int solution(String before, String after) {
        int answer = 0;
        
        // 1.
        char[] beforeCh = before.toCharArray();
        char[] afterCh = after.toCharArray();
        
        // 2.
        Arrays.sort(beforeCh);
        Arrays.sort(afterCh);
        
        // 3.
        if (new String(beforeCh).equals(new String(afterCh))) answer = 1;
        else answer = 0;
        
        return answer;
    }
}