문자열 밀기 - LV.0
문제
- 문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다.
- 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면
- 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
테스트 (인텔리제이)
- 처음 제 생각은 기본 문자열을 시작으로 문자열 마지막 문자부터 하나씩 잘라내어 나머지 문자열 앞에 붙이면 될거라 생각했습니다.
- 그래서 substring 메서드를 사용하여 for문으로 기본 문자열부터 하나씩 잘라내어 나머지 문자열 앞에 붙일 수 있도록 했습니다.
- 하지만 다른 사람 풀이를 보고 이렇게 풀 수 있구나를 깨닫고 그 풀이들을 가져와 봤습니다.
- 비교해야 할 B 문자열을 하나 더 붙여서 본 문자열과 비교하며 인덱스 값을 얻어내는 방법입니다.
- 위 사진처럼 B문자열을 하나 더 붙여서 indexOf 메서드로 A문자열과 비교하여 동일한 문자열이 있으면 해당 인덱스 값을 반환하도록 하는 방법입니다.
- 문자열을 하나 더 붙이는 과정은 repeat 메서드를 활용하는 방법과 더하기 연산으로 문자열을 더해주고
- indexOf 메서드로 인덱스 값을 반환하도록 하면 해결할 수 있습니다.
package com.namji.codingtest;
public class 문자열_밀기 {
public static void main(String[] args) {
/*
문자열 "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
입출력 설명
#1
"hello"를 오른쪽으로 한 칸 밀면 "ohell"가 됩니다.
#2
"apple"은 몇 번을 밀어도 "elppa"가 될 수 없습니다.
#3
"atat"는 오른쪽으로 한 칸, 세 칸을 밀면 "tata"가 되므로 최소 횟수인 1을 반환합니다.
#4
"abc"는 밀지 않아도 "abc"이므로 0을 반환합니다.
*/
// String A = "atat";
// String B = "tata";
// int answer = 0;
//
// for (int i = 0; i < A.length(); i++) {
// String newStr = A.substring(A.length() - i) + A.substring(0, A.length() - i);
// if (newStr.equals(B)) {
// answer = i;
// break;
// } else {
// answer = -1;
// }
// }
// System.out.println(answer);
// String A = "atat";
// String B = "tata";
//
// String tempB = B.repeat(2);
//
// System.out.println(tempB.indexOf(A));
String A = "abc";
String B = "abc";
System.out.println((B+B).indexOf(A));
}
}
프로그래머스 코드
class Solution {
public int solution(String A, String B) {
int answer = 0;
for (int i = 0; i < A.length(); i++) {
String newStr = A.substring(A.length() - i) + A.substring(0, A.length() - i);
if (B.equals(newStr)) {
answer = i;
break;
} else {
answer = -1;
}
}
return answer;
}
}
// class Solution {
// public int solution(String A, String B) {
// String tempB = B.repeat(2);
// return tempB.indexOf(A);
// }
// }
// class Solution {
// public int solution(String A, String B) {
// return (B+B).indexOf(A);
// }
// }
'Coding Test > Java Coding Test' 카테고리의 다른 글
[프로그래머스 / 자바] - 로그인 성공? (1) | 2024.09.21 |
---|---|
[프로그래머스 / 자바] - 배열 조각하기 (3) | 2024.09.20 |
[프로그래머스 / 자바] - 배열 만들기 2 (0) | 2024.09.18 |
[프로그래머스 / 자바] - 문자열 여러 번 뒤집기 (1) | 2024.09.17 |
[프로그래머스 / 자바] - PCCE 기출문제 6번 가채점 (6) | 2024.09.16 |