이번에도 대가리 깨지는 문제였다.
이딴게 어떻게 기초인가요;
https://school.programmers.co.kr/learn/courses/30/lessons/181943
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.
내 풀이
class Solution {
public String solution(String my_string, String overwrite_string, int s) {
String answer = my_string.substring(0,s) + overwrite_string;
if(my_string.length()>overwrite_string.length()){
answer += my_string.substring(s+overwrite_string.length());
}
return answer;
}
}
이 문제의 중요성은 substring함수를 쓸 수 있냐 없냐이다. 모르는 상태에서 풀어보려고 했는데 도저히 안되겠어서,,, 생각한 풀이가 있었는데 매우 유사한 풀이가 존재했지만 이 또한 내가 모르는 부분이 투성이들이었어서.... 추가로 정리하겠다.
substring(시작점, 끝점)
이런 식인데
아주 끝장나는 함수이다.
시작점부터 끝점까지 문자열을 딱 빼온다.
예를 들어, 안녕하세용.substring(0,3) 이라면, 결과는 안녕하 가 되는것이다. 그리고 안녕하세용.substring(3) 라면, 결과는 세용 !
0 1 2 3 4 5
커서가 이렇게 사이사이에 있는것으로 이해하기!
내가 쓴 코드는 바꿔야 하는 부분 이전까지의 my_string + 바꿔야하는부분 이라고 해놓고 진행했다.
하지만 이 이후에 만약 my_string의 길이가 바꿔야하는 overwrite보다 길다면 그 이후의 부분이 삭제가 될 것이다.
따라서 my_string의 길이가 바꿔야하는 overwrite보다 긴 경우에는
바꿔야하는 부분+overwrite.length 이후에 커서를 놓고 my_string을 출력해줘야 할 것이다.
새로운 문자열 answer 을 선언해줘서 그 안에다가 저장해주는 센스도 까먹지 말자.
이제 멋있는 풀이를 해석해보자.
class Solution {
public String solution(String my_string, String overwrite_string, int s) {
String before = my_string.substring(0, s);
String after = my_string.substring(s + overwrite_string.length());
return before + overwrite_string + after;
}
}
진짜 개지린다.
이 사람들은 이걸 단번에 개 깔끔하게 생각해냈겠지.
나도 열심히 할거다.
보면은 내 코드랑 별반 다를거 없어보이지만 아주 깔끔.
substring으로 앞부분 띄어내고, 바꿔야하는곳+overwrite.length 이후로 또 띄어내놓는다.
그러고선 그 사이에다가 그냥 삽입할 부분 삽입하면 끝.
어렵게 가지말고 쉽게쉽게. 간단간단하게 하면 된다.
class Solution {
public String solution(String my_string, String overwrite_string, int s) {
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);
}
}
이 풀이가 내가 처음에 말했던 내가 맨 처음 생각한 풀이..
하지만 내 문제점은 string을 배열처리를 하지 않았다는 것이고
이에 대한 함수 toCharArray 라는게 있다는것을 깨닫게 되었다.
String 문자열을 char형 배열로 바꿔서 반환해주는 메서드이다.
"안녕티비" 라는 문자열이 있으면
arr[0] = '안'
arr[1] = '녕'
arr[2] = '티'
arr[3] = '비'
위 값처럼 char 배열을 반환해준다.
char[]로 배열을 만들어주고
거기다가 대입.
for문을 써서 overwrite.length 만큼 반복.
my_chars 에서 바꿔야하는부분부터부터 순차적으로 바꿔준다 -> overwrite를 (i=0) 부터 순차적으로 넣어준다.
String.vlaueOf ()함수는 괄호 안에 있는것을 무조건 그냥 string으로 변환해주는 함수이다.
정리하자면 String -> toCharArray로 배열 -> String.vlaueOf()로 다시 String
이 순서로 코드 진행.
지리는 코드다.
이렇게 해서 별 거 아닌 문제였지만 그래도 몇시간에 걸쳐 해결했다....
복습도 꾸준히 할게요

강하나양의 엄청난 실력.... 감탄합니다 오늘도
'프로그래머스' 카테고리의 다른 글
| 프로그래머스(.length , 확장 for문 , String.join) - 코딩 기초 트레이닝 - 문자 리스트를 문자열로 (1) | 2024.08.27 |
|---|---|
| 프로그래머스(charAt) - 코딩 기초 트레이닝 - 문자열 섞기 (0) | 2024.08.27 |
| 프로그래머스- 코딩 기초 트레이닝- 문자열 변환 (0) | 2024.08.25 |