🗣️ 메모
며칠 전부터 문득문득 문자열 어케 뒤집지라는 생각을 했는데 오늘 프로그래머스에 있길래 냅다 풀어 봄
그나저나 새해부터 비대면 코테를 하나 봤는데...... 그저 눈물만
자바 문제가 왕 어려워서 SQL 문제에 집중할까 했는데 그마저 잘 안 됨 ㅎ
서브쿼리에 1개를 초과하는 rows가 나왔다던 그 문제가 자꾸 아른거린다
배점이 낮았던 걸로 봐서 그렇게 어렵게 풀 문제가 아니었던 것 같은데 내 머리는 왜 돌아가지 않았던 것인가 ㅠ
그래서 정답은 무엇인가,,
✏️ [문자열 뒤집기]
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
입출력 예
my_string | return |
"jaron" | "noraj" |
"bread" | "daerb" |
입출력 예 설명
입출력 예 #1
- my_string이 "jaron"이므로 거꾸로 뒤집은 "noraj"를 return합니다.
입출력 예 #2
- my_string이 "bread"이므로 거꾸로 뒤집은 "daerb"를 return합니다.
🔥🎉 TRY #1 [실행 결과] - StringBuffer 사용
👉🏻 String은 불변, StirngBuffer/StringBuilder는 가변 문자열임을 확인
👉🏻 String을 StringBuffer 객체에 넣고 reverse().toString() 메소드로 뒤집기
class Solution {
public String solution(String my_string) {
String answer = "";
StringBuffer str = new StringBuffer(my_string);
answer = str.reverse().toString();
return answer;
}
}
👉🏻 StringBuffer와 StringBuilder의 공통점과 차이점
String
불변 문자열로 값을 변경할 시 새로운 메모리 영역이 할당되며 연결고리가 끊긴 문자열은 힙 영역에 떠돌다가 GC에 의해 정리됨
즉, 문자열을 수정하는 시점에 String의 새로운 인스턴스가 생성됨
StringBuffer / String Builder의 공통점
수정/삭제가 빈번하게 일어나는 경우에 사용하면 좋을 가변성을 가진 문자열
.append(), .delete() 메소드를 통해 문자열을 손쉽게 수정/삭제 가능함
StringBuffer
동기화 키워드를 지원하므로 멀티 쓰래드 환경, 문자열 연산이 잦을 때 적합함
StringBuilder
동기화 키워드를 지원하지 않으므로 단일 쓰래드 환경에 적합함
그만큼 동기화를 고려하지 않기 때문에 단일 쓰래드 환경에서 StringBuffer보다 훨씬 좋은 효율을 가짐
🔥🎊 TRY #2 [실행 결과] - char[] 배열로 바꾼 후 순서를 뒤집고 다시 String으로
👉🏻 아주 원시적인 방법이긴 하지만 이런 방법도 있음을 알아두면 언젠가는 도움되겠지
👉🏻 제일 처음에 생각한 방식이었는데 뭐가 잘 안 됐었음(String을 바로 뒤집으려 했으니 당연함)
class Solution {
public String solution(String my_string) {
char[] arr = my_string.toCharArray();
char[] reverseArr = new char[arr.length];
for(int i = 0; i < my_string.length(); i++) {
reverseArr[i] = arr[my_string.length() - i - 1];
}
String answer = new String(reverseArr);
return answer;
}
}
출처: 프로그래머스 코딩 테스트 연습,https://school.programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr