본문 바로가기
Coding Test/Java Coding Test

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

by nam_ji 2024. 9. 19.

문자열 밀기 - 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);
//     }
// }