문제: 코딩테스트 연습 - A로 B 만들기 | 프로그래머스 스쿨 (programmers.co.kr)
문제설명
문자열 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 String[]
import java.util.*;
class Solution {
public int solution(String before, String after) {
int answer = 0;
String[] b = before.split("");
String[] a = after.split("");
Arrays.sort(b);
Arrays.sort(a);
if(Arrays.equals(a, b)) answer = 1;
return answer;
}
}
//문제풀이2 char[], 삼항연산자
import java.util.*;
class Solution {
public int solution(String before, String after) {
int answer = 0;
char[] b = before.toCharArray();
char[] a = after.toCharArray();
Arrays.sort(b);
Arrays.sort(a);
answer = new String(a).equals(new String(b)) ? 1 :0;
return answer;
}
}
다른 사람의 문제풀이
//다른사람 풀이1 .replaceFirst() 이용
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;
}
}
//다른사람 풀이2
class Solution {
public int solution(String before, String after) {
int answer = 1;
int[] alphas1 = new int[26];
int[] alphas2 = new int[26];
for(int i=0; i<before.length(); i++){
alphas1[before.charAt(i)-'a']++;
alphas2[after.charAt(i)-'a']++;
}
for(int i=0; i<alphas1.length; i++){
if(alphas1[i]!=alphas2[i]) answer=0;
}
return answer;
}
}
느낀점
처음에 String[] 으로 풀었는데, String보다 char이 더 빠르지 않을까? 라는 생각이들어서 char[]으로 풀고, 삼항연산자도 이용해서 작성해서 풀어보았다.
다른사람의 풀이를 보니엄청 간결해서 충격 받았다! .replaceFirst() 나도 기억해둬야겠다!
그리고 알파벳을 이용한 방법도 좋아서 기록해보았다!
'코딩테스트 연습 > 프로그래머스 LV.0' 카테고리의 다른 글
[프로그래머스] Lv.0 치킨 쿠폰 - 자바(Java) (0) | 2024.04.18 |
---|---|
[프로그래머스] Lv.0 이진수 더하기 - 자바(Java) (0) | 2024.04.15 |
[프로그래머스] Lv.0 k의 개수 - 자바(Java) (0) | 2024.04.11 |
[프로그래머스] Lv.0 중복된 문자 제거 - 자바(Java) (0) | 2024.04.10 |
[프로그래머스] Lv.0 진료 순서 정하기 - 자바(Java) (0) | 2024.04.09 |