<문제 제시>
<문제설명>
문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고
마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다.
이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때,
A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고
밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
<예시 입출력>
<문제 해결 과정>
문자열 밀기라고 한다면, 배열에서나 리스트 등의 자료구조에서 특정 메서드를 통해 쉽게 해결할 수 있지만,
이 문제에서는 String만 주어졌을때 해결할 방법을 찾는 것이다.
Solution 1)
다만 두 문자열이 주어지고, A를 기준으로 B문자열은 얼마나 이동했는지 (오른쪽으로만 밀게됨) 를 판단한다.
for(int i = 0; i < A.length(); i++) {
if(copy_A.equals(B)) {
return answer;
}
String temp = copy_A.substring(copy_A.length() - 1);
copy_A = temp + copy_A.substring(0, copy_A.length() - 1);
answer++;
}
A를 복사하고, 복제된 A와 B가 일치하는지를 먼저 판단한다. 일치한다면 바로 0을 반환하면된다.
1. A.length()만큼 반복이므로,
2. 복제된 A를 잘라낸다. (substring활용)
copy_A.substring(copy_A.length() - 1);
copy_A.length() - 1 부터 문자의 마지막까지 잘라내어 temp에 저장한다.
ex) hello 이면, copy_A = "hello"
temp = "o"; 가 저장된다.
copy_A = temp + copy_A.substring(0, copy_A.length() - 1);
이 코드를 통해 copy_A = "o" + "hell";
copy_A = "ohell"; 이 된다. (기존 문자열A를 오른쪽으로 한 칸 밀어낸 모습)
이렇게 한 문자씩 밀어내지고, answer의 증감값도 1씩 증가되므로, A.length()만큼 반복하여 A의 총 문자를 모두 판단해내는 것이다.
전체코드)
public class push_string {
public static int solution(String A, String B) {
int answer = 0;
String copy_A = A;
for(int i = 0; i < A.length(); i++) {
if(copy_A.equals(B)) {
return answer;
}
String temp = copy_A.substring(copy_A.length() - 1);
copy_A = temp + copy_A.substring(0, copy_A.length() - 1);
answer++;
}
return -1;
}
public static void main(String[] args) {
String A = "hello";
String B = "ohell";
System.out.println(solution(A, B));
}
}
copy_A라는 변수를 통해 substring()으로 한 칸씩 밀어낸 문자를 업데이트해가며 B와 일치할때까지 answer값을 증가시키며 찾는 문제였다. substring의 활용방법을 공부할 수 있었다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120921
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '특이한 정렬' - Java (0) | 2023.07.13 |
---|---|
[프로그래머스] '로그인 성공?' - Java (0) | 2023.07.13 |
[프로그래머스] '등수 매기기' - Java (0) | 2023.07.12 |
[프로그래머스] '유한소수 판별하기' - Java (0) | 2023.07.12 |
[프로그래머스] '달리기 경주' - Java (0) | 2023.05.21 |