Algorithms/프로그래머스

[프로그래머스] '문자열 밀기' - Java

LEFT 2023. 7. 14. 13:51

<문제 제시>

<문제설명>
문자열 "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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr