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 사용했을 때
'코딩테스트 > JAVA' 카테고리의 다른 글
[JAVA/프로그래머스] 저주의 숫자 3 (0) | 2024.02.07 |
---|---|
[JAVA/프로그래머스] 외계어 사전 (2) | 2024.02.04 |
[JAVA/프로그래머스] 등차수열의 특정한 항만 더하기 (0) | 2024.01.29 |
[JAVA/프로그래머스] 모의고사 (0) | 2024.01.15 |
[JAVA/프로그래머스] N개의 최소공배수 (1) | 2024.01.14 |