문자열 s는 한 개 이상의 단어로 구성되어 있고, 각 단어에는 하나 이상의 공백문자로 구분되어 있을 때, 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 solution 구축 (제한 사항: 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단) 문제 보러가기
나의 전략은 아래와 같았다:
- s에 들어오는 문자열을 공백기준 따로 따로 만들기 {"try hello world"} -> {try, hello, world}
- s.arr에 들어가있는 단어들의 인덱스 번호 찾기
- if문을 사용하여 인덱스번호가 % 2 == 0 일경우 대문자로 else 소문자로 변경
해당 문제를 풀면서 내가 얼마나 변수를 생성하는 것이 부족한지 알았다. 변수를 어디에 어떻게 만들어야하는지 아직 감이 잘 오지 않는것 같다. 해당 코드를 아래와 같이 작성하였다.
class Solution {
public String solution(String s) {
String str = s;
String[] words = str.split("");
for (int i = 0; i < s.length(); i++) {
if (i % 2 == 0){ //even일 경우 대문자
words[i] = str.toUpperCase(); //어떻게 인덱스에 값을 대문자로 바꿔주나...
} else {
words[i] = str.toLowerCase();
}
}
String answer = str;
return answer;
}
}
가장 큰 문제는 2가지였다.
class Solution {
public String solution(String s) {
String answer = "";
String[] str = s.split("");
int idx = 0;
for(int i=0; i<str.length; i++) {
if(str[i].equals(" ")) {
idx = 0;
} else if(idx % 2 == 0) {
str[i] = str[i].toUpperCase();
idx++;
} else {
str[i] = str[i].toLowerCase();
idx++;
}
answer += str[i];
}
return answer;
}
}
해당 코드와 제일 큰 차이점은 idx라는 index박스를 생성하여 0도 세팅하고 UpperCase와 LowerCase를 넣어주었다. 해당 문제를 풀면서 아래와 같이 배울 수 있었다.
split에는 두가지 종류가 있다.
- public String[] split(String regex)
- public String[] split(String regex, int limit)
1번 메서드의 경우 제한없이 모든 부분 문자열을 반환한다.
예시)
String string_1="JavaProgram";
System.out.println(Arrays.toString(s.split("a")));
2번 메서드의 경우 분할된 부분 문자열의 수가 제한된 경우 사용이 되며, limit인수는 반환할 배열의 길이를 제한한다.
예시) String s = "Spencer Plaza, New York, USA";
String[] data = s.split(",", 2);
System.out.println("Name = "+data[0]); // Spencer Plaza
System.out.println("Address = "+data[1]); //New York,USA
toUpperCase();와 toLowerCase();는 문자열을 대문자 혹은 소문자로 변환해 반환한다.
이 부분이 코딩 작성에 있어 나의 가장 큰 문제점이라는 것을 깨달았다. 변수 만드는 것에 두려움을 갖지말자. 어디에 작성하던 일단 작성하고 오류가 나면 고쳐보자!