문자열 문제이다. : )
📑 이상한 문자 만들기
🔗 https://school.programmers.co.kr/learn/courses/30/lessons/12930
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s | return |
"try hello world" | "TrY HeLlO WoRlD" |
입출력 예 설명
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
✏️ 문제 해결 방법
주어지는 입력 문자 s 는 단어로 이루어져 있고 이 단어는 공백을 기준으로 짝수 / 홀수 인덱스를 판단해야 한다. 따라서 공백을 분리하여 String 배열에 넣고 각 단어의 짝/홀수를 판별하여 대문자, 소문자로 변환 해주고자 하였다.
1. 공백 분리해주기
공백을 분리 해주기 위해 split 메서드를 사용했다.
String[] words = s.split(" ", -1);
split에서 limit 값이 0보다 작을 경우 뒤에 나오는 값들도 split을 진행해준다. 예를 들어 "try hello world " 처럼 입력이 주어지면 출력에서도 뒤에 공백은 그대로 나와야 할 것이다. ["try", "hello", "world","","","",...""] 이런 식으로 공백 또한 처리를 해주기 위해 -1을 사용한다.
2. 새로운 문자를 만들어 주기 위해 StringBuilder 사용
String의 경우 str = "try"가 있을 때 str + " hello" 라고 하면 "try hello"라고 출력은 되지만 메모리에 "try hello" 라는 값을 따로 만들고 다시 변수 str을 참조하게 된다. 이전에 있던 "try"는 GC의 제거 대상이 되는 것이다.
String 의 경우 불변이기 때문에 매번 문자를 생성해주는 코테 문제에서는 메모리 공간을 많이 차지 할 수 있어 가변 가능한 StringBuilder 나 StringBuffer를 사용해주는 것이 좋다. (추가, 수정, 삭제 성능이 훨씬 뛰어나다.) 코테에서는 둘 중 편한 것을 쓰면 된다고 해서 나는 StringBuilder를 많이 쓰는 편이다.
3. words 배열 내부의 단어 돌면서 단어의 짝수번째 문자, 홀수 번째 문자 변경하기
생각한대로 코드를 작성했다. 원래는 for each 문으로 조금 더 편하게 작성하고 싶었는데 for문을 word.length 길이만큼 돌리고 이 길이의 하나 전까지만 공백을 추가해야 해서 for each문을 사용하지 못 하였다.
전체 코드
class Solution {
public String solution(String s) {
String[] words = s.split(" ", -1);
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < words.length ; i++){
for(int j = 0 ; j < words[i].length() ; j++){
if(j%2==0){
sb.append(Character.toUpperCase(words[i].charAt(j)));
} else {
sb.append(Character.toLowerCase(words[i].charAt(j)));
}
}
if(i < words.length -1) {
sb.append(" ");
}
}
return sb.toString();
}
}
🕸️ 문제 풀이 소감
다른 사람들이 푼 코드를 봤는데 매우 간단하게 푼 코드들이 꽤 있어서 많이 놀랐고 많이 배웠다. 다양한 코드를 보고 직접 작성해보는 것 또한 중요한 것 같다. : )
궁금한 점이 있거나 잘못된 부분이 있다면 얼마든지 댓글로 남겨주세요 🤗
감사합니다!
'LANGUAGE > JAVA' 카테고리의 다른 글
[알고리즘] 프로그래머스 3진법 뒤집기 (레벨 1) / 자바 java 풀이 (0) | 2024.06.20 |
---|---|
[알고리즘] 프로그래머스 자연수 뒤집어 배열로 만들기 (레벨 1) / 자바 java 풀이 (0) | 2024.06.19 |
[알고리즘] 프로그래머스 자연수 뒤집어 배열로 만들기 (레벨 1) / 자바 java 풀이 (0) | 2024.06.17 |
[알고리즘] 프로그래머스 행렬의 곱셈 (레벨 2) / 자바 java 풀이 (0) | 2024.06.17 |
[알고리즘] 프로그래머스 시저암호 (레벨 1) / 자바 java 풀이 (2) | 2024.06.16 |