Day2 - 문자열 겹쳐쓰기
📌 문제 정보
- 문제 이름 : 코딩 기초 테스트 - 문자열 겹쳐쓰기
- 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/181943
📌 문제 요약
- 핵심 조건: 문자열 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의 길이
📌 내 풀이 및 코드
class Solution {
public String solution(String my_string, String overwrite_string, int s) {
String answer = "";
String front = my_string.substring(0, s);
String middle = overwrite_string;
String back = my_string.substring(s + overwrite_string.length());
answer = front + middle + back;
return answer;
}
}
- 문법 모르겠어서 힌트 받아서 품. (substring으로 앞(front) + 덮어쓰기(middle) + 뒤(back)로 나눠서 이어붙임.)
- public String solution : 채점 프로그램 함수..
📌 다른 사람들 풀이
// 1
String before = my_string.substring(0, s);
String after = my_string.substring(s + overwrite_string.length());
return before + overwrite_string + after;
// 2
char[] my_chars = my_string.toCharArray();
char[] overwrite_chars = overwrite_string.toCharArray();
for (int i=0; i<overwrite_chars.length; i++) {
my_chars[s + i] = overwrite_chars[i];
}
return String.valueOf(my_chars);
// 3
if(my_string.length() > answer.length()) {
answer += my_string.substring(answer.length());
}
<-- 다른 풀이 요약 -->
- 1 : 내 코드랑 그냥 같음. middle 변수를 따로 안 쓰고 그냥 overwrite_string에 직접 붙임.
- 2 : substring 없이 → 문자 배열로 직접 덮어쓰기 (String은 불변이라 못 바꾸니까 char[]로 바꿔 배열 원소 교체)
- 3 : substring 이어붙임의 보조 단계 (answer에 before+overwrite_string만 먼저 붙여두고, 아직 붙이지 않은 뒤쪽이 있으면 substring으로 이어붙임.) => 덮어쓰기 길이를 따로 계산하지 않고 answer 길이로 비교. (이 풀이가 가장 많았음.)
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
** substring **
- 문자열의 일부(부분 문자열) 를 잘라서 새 문자열을 만드는 메서드
- substring(begin, end)는 begin부터 end 미만까지 잘라서 새 문자열 리턴함.
- substring(begin) : begin부터 끝까지, beginIndex : 0 이상이어야 함.
- endIndex는 beginIndex 이상이어야하고, 문자열 길이보다 커지면 안 됨.
// 자바 String 클래스에 있는 기본 문법
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
// 예시
String s = "abcdefg";
System.out.println(s.substring(2)); // "cdefg"
System.out.println(s.substring(2, 5)); // "cde"
System.out.println(s.substring(0, 1)); // "a"
System.out.println(s.substring(s.length() - 2)); // 끝 2글자: "fg"