Q. 이상한 문자 만들기
A1
class Solution {
public String solution(String s) {
StringBuilder answer = new StringBuilder();
int start = 0;
//문자열을 처음부터 끝까지 for문 반복으로 확인
for(int i=0; i<=s.length(); i++){
//만약 해당 문자가 문자열의 끝이거나, 공백일 경우
if(i == s.length() || s.charAt(i) == ' '){
//단어 처리
for(int j = start; j < i; j ++){
char c = s.charAt(j);
//단어 내 짝수 인덱스 일 경우 -> 대문자
if((j-start) % 2 == 0){
answer.append(Character.toUpperCase(c));
//단어 내 홀수 인덱스 일 경우 -> 소문자
}else {
answer.append(Character.toLowerCase(c));
}
}
//공백 추가(마지막 단어 제외)
if(i != s.length()){
answer.append(" ");
}
//다음 단어 시작 위치 업데이트
start = i +1;
}
}
//StringBuilder에 쌓인 내용을 최종적으로 String 객체로 변환하여 반환
return answer.toString();
}
}
A2
class Solution {
public String solution(String s) {
//입력 문자열을 공백 기준으로 나눔
//-1을 추가로 설정하여 공백만 있는 부분도 배열에 포함되도록 함
String[] words = s.split(" ", -1);
StringBuilder answer = new StringBuilder();
//단어 배열을 돌며 각각의 단어를 처리
for(int i=0; i<words.length; i++){
//현재 단어를 가져옴
String word = words[i];
//변환된 단어를 저장할 StringBuilder 생성
StringBuilder trans = new StringBuilder();
//현재 단어의 각 문자를 순회
for(int j=0; j<word.length(); j++){
char c = word.charAt(j);
//j번째 문자가 짝수 인덱스면 대문자, 홀수 인덱스면 소문자
if(j%2 == 0){
trans.append(Character.toUpperCase(c)); //대문자
}else{
trans.append(Character.toLowerCase(c)); //소문자
}
}
//변환된 단어를 answer에 추가
answer.append(trans);
//마지막 단어가 아닌 경우에만 공백 추가
if(i != words.length-1){
//단어 사이에 공백을 추가
answer.append(" ");
}
}
return answer.toString();
}
}
-중첩 조건문이 너무 많이 사용되서 줄일 수 있는 방법을 찾다가 split 발견
*StringBuilder
-가변 객체
-문자열을 수정하거나 추가할 때 내부 배열을 직접 변경하므로 메모리와 성능 면에서 효율적
-문자열이 수정될 때 새로운 객체를 생성하지 않는다. (String을 사용하면 매번 새로운 객체가 생성된다.)
-append를 호출하면 기존 StringBuilder 객체에 값이 추가된다.
-기능
- append : 문자열 추가
- insert : 특정 위치에 문자열 삽입
- replace : 문자열 교체
- delete : 문자열 삭제
- reverse : 문자열 뒤집기
-반복문 안에서 문자열을 반복적으로 조작해야하는 경우 사용하는 것이 좋음
-코드가 효율적이고 실행속도가 빨라짐
*split( )
-입력 문자열을 공백으로 나눈다.
-split() 메서드에 -1을 추가하면 연속된 공백이나 마지막 공백도 배열에 포함된다.
'알고리즘, 코딩테스트 > 알고리즘 풀이' 카테고리의 다른 글
[프로그래머스/ 코딩테스트 연습문제] 크기가 작은 부분 문자열 (0) | 2024.12.03 |
---|---|
[프로그래머스/ 코딩테스트 연습문제] 삼총사 (0) | 2024.11.26 |
[프로그래머스/ 코딩테스트 월간코드챌린지 시즌1] 3진법 뒤집기 (0) | 2024.11.20 |
[프로그래머스/ 코딩테스트 연습문제] 최대공약수와 최소공배수 (0) | 2024.11.20 |
[프로그래머스/ 코딩테스트 연습문제] 직사각형 별 찍기 (1) | 2024.11.18 |