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

[프로그래머스 / 자바] - 문자열 겹쳐쓰기

by nam_ji 2024. 8. 20.

문자열 겹쳐쓰기 LV.0

문제

  • 문자열 my_string, overwrite_string과 정수 s가 매개변수로 주어집니다.
  • my_string의 인덱스 s부터 overwrite_string의 길이만큼
  • 문자열 overwrite_string으로 바꾼 문자열을 출력하는 문제입니다.
  • 입출력 예
    • my_string overwrite_string s result
      "He11oWor1d" "lloWorl" 2 "HelloWorld"
      "Program29b8UYP" "merS123" 7 "ProgrammerS123"
      "Pro29b8mers" "gram" 3 "Programmers"

 


테스트 (인텔리제이)

  • my_string의 문자열을 s부터 overwrite_string의 크기만큼 범위의 문자열을 overwrite_string으로 대체하는 문제입니다.
  • 그래서 생각한 방법은 for문으로 0 ~ s 까지 순회하도록 하고  my_string의 해당 인덱스에 위치한 문자를 꺼내 answer에 담고
  • 이어서 overwrite_string의 문자열을 추가하고 마지막 나머지 남아 있을 문자가 있을 수 있기 때문에
  • if문으로 answer의 크기가 my_string의 크기보다 작다면 my_string을 substring으로 answer의 크기부터 마지막 문자까지 answer에 담도록 하여 문제를 해결했습니다.
  • 또 다른 풀이는 다른 사람의 풀이에서 좋은 풀이가 있어 가져와 봤습니다.
  • 문자열 before와 after 변수를 선언하고 각각
  • before에는 substring으로 0 ~ s까지 my_string을 잘라서 저장해줍니다.
  • after에는 substring으로 s + overwrite_string의 크기부터 마지막까지 my_string을 잘라서 저장해줍니다.
  • 마지막으로 answer에 before + overwrite_string + after를 담아주면 됩니다.
package com.namji.codingtest;

public class 문자열_겹쳐쓰기 {
  public static void main(String[] args) {
    /*
    문자열 my_string, overwrite_string과 정수 s가 매개변수로 주어집니다.
    my_string의 인덱스 s부터 overwrite_string의 길이만큼
    문자열 overwrite_string으로 바꾼 문자열을 출력하는 문제입니다.

    입출력 예
    my_string	        overwrite_string	s	result
    "He11oWor1d"	    "lloWorl"	        2	"HelloWorld"
    "Program29b8UYP"	"merS123"	        7	"ProgrammerS123"
    "Pro29b8mers"     "gram"            3 "Programmers"

    입출력 설명
    #1
    예제 1번의 my_string에서 인덱스 2부터 overwrite_string의 길이만큼에
    해당하는 부분은 "11oWor1"이고 이를 "lloWorl"로 바꾼 "HelloWorld"를 return 합니다.
    #2
    예제 2번의 my_string에서 인덱스 7부터 overwrite_string의 길이만큼에
    해당하는 부분은 "29b8UYP"이고 이를 "merS123"로 바꾼 "ProgrammerS123"를 return 합니다.
     */
//    String my_string = "Pro29b8mers";
//    String overwrite_string = "gram";
//    int s = 3;
//    StringBuilder answer = new StringBuilder();
//
//    for (int i = 0; i < s; i++) {
//      answer.append(my_string.charAt(i));
//    }
//    answer.append(overwrite_string);
//
//    if (answer.length() < my_string.length()) {
//      answer.append(my_string.substring(answer.length()));
//    }
//    System.out.println(answer);

    String my_string = "Pro29b8mers";
    String overwrite_string = "gram";
    int s = 3;
    StringBuilder answer = new StringBuilder();

    String before = my_string.substring(0, s);
    String after = my_string.substring(s + overwrite_string.length());
    answer.append(before)
        .append(overwrite_string)
        .append(after);

    System.out.println(answer);
  }
}

프로그래머스 코드

// class Solution {
//     public StringBuilder solution(String my_string, String overwrite_string, int s) {
//         StringBuilder answer = new StringBuilder();
        
//         for (int i = 0; i < s; i++) {
//             answer.append(my_string.charAt(i));
//         }
//         answer.append(overwrite_string);
//         if (answer.length() < my_string.length()) {
//             answer.append(my_string.substring(answer.length()));
//         }
//         return answer;
//     }
// }

class Solution {
    public StringBuilder solution(String my_string, String overwrite_string, int s) {
        StringBuilder answer = new StringBuilder();
        
        String before = my_string.substring(0, s);
        String after = my_string.substring(s + overwrite_string.length());
        
        return answer.append(before).append(overwrite_string).append(after);
    }
}