목차
문제 설명
문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 < A의 길이 = B의 길이 < 100
- A, B는 알파벳 소문자로 이루어져 있습니다.
A | B | result |
---|---|---|
"hello" | "ohell" | 1 |
"apple" | "elppa" | -1 |
"atat" | "tata" | 1 |
"abc" | "abc" | 0 |
import java.util.Deque;
import java.util.LinkedList;
class Solution {
public int solution(String A, String B) {
Deque<Character> deque = new LinkedList<>();
// A의 각 문자를 Queue에 추가
for (char ch : A.toCharArray()) {
deque.add(ch);
}
// deque를 문자열로 변환하고 B와 비교
int rotations = 0;
while (!B.equals(dequeToString(deque)) && rotations < A.length()) {
deque.addFirst(deque.removeLast()); // 마지막 문자를 맨 앞으로 이동
rotations++; // 회전 횟수 증가
}
if(rotations >= B.length()){
return -1;
}
return rotations;
}
// Deque를 문자열로 변환하는 메서드
private static String dequeToString(Deque<Character> deque) {
StringBuilder sb = new StringBuilder();
for (char ch : deque) {
sb.append(ch);
}
return sb.toString();
}
}
코드 해설:
- dequeToString 메서드:
- Deque를 문자열로 변환하기 위해 각 문자를 순회하며 StringBuilder에 추가.
- while 조건:
- B.equals(dequeToString(deque)): Deque의 현재 문자열 표현과 B를 비교.
- rotations < A.length(): 무한 루프를 방지하기 위해 최대 회전 횟수를 문자열 길이로 제한.
- deque.addFirst(deque.removeLast()):
- 큐의 마지막 요소를 앞쪽으로 이동.
- 결과 출력:
- 최종적으로 Deque를 회전하여 B와 동일해진 경우와 그렇지 않은 경우를 구분하여 출력.
728x90
'JAVA > 프로그래머스 코딩테스트 입문' 카테고리의 다른 글
[프로그래머스, LV.0] 다항식 더하기 (1) | 2024.12.15 |
---|---|
[프로그래머스, LV.0] 특이한 정렬 (0) | 2024.12.15 |
[프로그래머스, LV.0] 유한소수 판별하기 (0) | 2024.12.14 |
[프로그래머스, LV.0] 치킨 쿠폰 (0) | 2024.12.14 |
[프로그래머스, LV.0] 등수 매기기 (2) | 2024.12.14 |