본문 바로가기

프로그래머스 코딩(자바)/Level 0 날짜별 풀이

프로그래머스/코딩 기초 트레이닝 Day2 - 문자열 겹쳐쓰기

728x90

[문제]

문제 설명 : 문자열 my_string, overwrite_string과 정수 s가 주어집니다. 
문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

제한사항
my_string와 overwrite_string은 숫자와 알파벳으로 이루어져 있습니다.
1 ≤ overwrite_string의 길이 ≤ my_string의 길이 ≤ 1,000
0 ≤ s ≤ my_string의 길이 - overwrite_string의 길이


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

입출력 예 설명
입출력 예 #1
예제 1번의 my_string에서 인덱스 2부터 overwrite_string의 길이만큼에 해당하는 부분은 "11oWor1"이고 이를 "lloWorl"로 바꾼 "HelloWorld"를 return 합니다.

입출력 예 #2
예제 2번의 my_string에서 인덱스 7부터 overwrite_string의 길이만큼에 해당하는 부분은 "29b8UYP"이고 이를 "merS123"로 바꾼 "ProgrammerS123"를 return 합니다.

 

[풀이]

1
2
3
4
5
6
7

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

 

[설명]

replace, replaceAll, replaceFirst 전부 써보고 6번 케이스에서 계속 실패 했습니다.

 

1. repalce()
String replace(CharSequence target, CharSequence replacement)
첫번째 매개변수는 변환하고자 하는 대상이 될 문자열, 두번째 매개변수는 변환할 문자 값이다.

2. repalceAll()
String replaceAll(String regex, String replacement)
replaceAll() 함수는 대상 문자열을 원하는 문자값으로 변환하는 함수이다.
첫번째 매개변수는 변환하고자 하는 대상이 될 문자열이고 두번째 매개변수는 변환할 문자 값이다.

3. replaceFirst()
String replaceFirst(String regex, String replacement) 
처음으로 만나는 패턴만 대치하고, 정규식을 활용할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31













public class Solution {
    public static String solution1(String my_string, String overwrite_string, int s) {
        String answer = my_string.replace(my_string.substring(s, overwrite_string.length() + s),
 overwrite_string);
        return answer;
    }
 
    public static String solution2(String my_string, String overwrite_string, int s) {
        String answer = my_string.replaceAll(my_string.substring(s, overwrite_string.length() + s),
 overwrite_string);
        return answer;
    }
    
    public static String solution3(String my_string, String overwrite_string, int s) {
        String answer = my_string.replaceFirst(my_string.substring(s, overwrite_string.length() + s),
 overwrite_string);
        return answer;
    }
    
    public static void main(String[] args) {
        System.out.println(Solution.solution1("He11oWor1d""lloWorl"2));
        System.out.println(Solution.solution1("Program29b8UYP""merS123"7));
        System.out.println();
        System.out.println(Solution.solution2("He11oWor1d""lloWorl"2));
        System.out.println(Solution.solution2("Program29b8UYP""merS123"7));
        System.out.println();
        System.out.println(Solution.solution3("He11oWor1d""lloWorl"2));
        System.out.println(Solution.solution3("Program29b8UYP""merS123"7));
        System.out.println();
    }
}
/*
실행 결과
 
HelloWorld
ProgrammerS123
 
HelloWorld
ProgrammerS123
 
HelloWorld
ProgrammerS123
*/

 

 

밑에 다른 분들 질문 글에 overwrite가 여러번 나올 수도 있다고 해서 substring 써서 해결했습니다.

 

Java 사용중 문자열을 원하는 위치에서 잘라야 하는 경우가 있습니다. 

이때 사용하는 하는 java 함수가 바로 substring 입니다. 

 

1. String substring(int index)
substring 함수는 두가지가 있으며, 그중 첫번째로 인자값을 하나만 받는 함수 입니다. 
인자값은 int 형으로 substring 하고자 하는 문자열의 앞에서 부터 몇번째 위치인가를 지정하는 값입니다. 
입력받은 인자값을  index 로 해당 위치를 포함하여 이후의 모든 문자열을 리턴 시키는 함수 입니다. 
이때 이 index 값은 0 부터 시작 합니다. (첫번째 자리에 있다고 1 부터 시작한다고 생가하면 안됩니다.)

2. String substring(int beginIndex, int endIndex)
첫번째 입력 받는 인자 값은 인자값이 한개인 substring 과 같이 가져올 문자열의 시작 부분을 지정합니다. 
두번째 입력 받는 인자 값은 가져올 문자열의 끝 부분을 지정 하는 것으로 substring(in index) 가 시작부분만 지정하고 나머지 모든 문자열을 리턴하는것과 차이가 있습니다. 
beginIndex 위치에서 시작하여 endIndex 전 위치까지의 값을 리턴 합니다. 

 

String answer = 
my_string.substring(0,s)    // 앞의 글자를 잘라내고
+ overwrite_string          // 바꿀 문자열을 붙여주고 
+ my_string.substring(overwrite_string.length() + s); // s + 바꿀문자열길이 번째부터 잘라서 붙임

 

 

[실행 결과]

 

 
728x90