코딩테스트/JAVA

[JAVA/프로그래머스] 문자열 밀기

할루솔이 2024. 2. 3. 23:54
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/120921

 

프로그래머스

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

programmers.co.kr

 

 

문제 설명
문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

제한사항
0 < A의 길이 = B의 길이 < 100
A, B는 알파벳 소문자로 이루어져 있습니다.


입출력 예


입출력 예 설명
입출력 예 #1
"hello"를 오른쪽으로 한 칸 밀면 "ohell"가 됩니다.


입출력 예 #2
"apple"은 몇 번을 밀어도 "elppa"가 될 수 없습니다.


입출력 예 #3
"atat"는 오른쪽으로 한 칸, 세 칸을 밀면 "tata"가 되므로 최소 횟수인 1을 반환합니다.


입출력 예 #4
"abc"는 밀지 않아도 "abc"이므로 0을 반환합니다.


👉 풀이과정

문자열을 재조립해야하니까 StringBuilder를 사용했다.subString을 사용해볼까 싶기도 했는데 그냥 StringBuilder 쓰고 싶었다ㅋㅋㅋ

 

sb객체에 A를 저장해서 사용하면 된다.만약, A와 B가 동일하다면 바로 0을 리턴할 수 있게 조건문을 작성하고 그 외 상황일때만 아래 코드가 작동할 수 있게 했다.

 

sb 맨 마지막 글자를 temp에 저장해두고 sb객체에서 삭제한다.예를 들어서,

hello 

에서 o를 temp에 저장하고 삭제해서 hell만 남을 수 있게!

그리고 insert()를 사용해 맨 앞에 temp를 넣어준다.

(앞에 0은 어디에 넣을지 자릿수를 의미하고, 뒤에 어떤 문자를 넣을지 알려주면 끝!)

 

StringBuilder객체와 String은 equals()로 비교할 수 없기 때문에

toString()을 사용해서 문자열로 변환하고 equals()를 사용해서 B와 비교한다.

 

i가 0부터 시작했기 때문에 answer는 i+1을 하면 되고,

조건이 일치할 경우에는 바로 return을 하면 된다!!!!!

 

📌 제출코드

import java.util.*;
class Solution {
    public int solution(String A, String B) {
        int answer = 0;
        StringBuilder sb = new StringBuilder(A);
        int length = A.length()-1;
        
        if(A.equals(B)){
            return answer;
            
        }else{
            for(int i=0;i<length;i++){
                char temp = sb.charAt(length);
                
                sb.delete(length, A.length());
                sb.insert(0,temp);

                if(sb.toString().equals(B)){
                    answer = i+1;
                    return answer;
                }
            }
            
            answer = -1;
            
            return answer;
        }
    }
}

 

너무 비효율적인가? 그냥 subString() 사용할걸 그랬나 싶지만 

StringBuilder사용했을 때랑 subString() 사용했을 때랑 효율은 조금 차이가 난다!!

 

1. StringBuilder사용했을 때

 

2. subString 사용했을 때

 

 

 

 

반응형