문자열 s
는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳
은 대문자
로, 홀수번째 알파벳
은 소문자
로 바꾼 문자열을 리턴하는 함수, solution
을 완성하세요.
0
번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.s | return |
---|---|
"try hello world" | "TrY HeLlO WoRlD" |
"try hello world"
는 세 단어 "try"
, "hello"
, "world"
로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY"
, "HeLlO"
, "WoRlD"
입니다. 따라서 "TrY HeLlO WoRlD"
를 리턴합니다.
class Solution {
public String solution(String s) {
String answer = "";
//원본 문자열의 길이
int sLength = s.length();
//변환된 문자들을 저장할 배열
char[] result = new char[sLength];
//문자열 처음부터 끝까지 하나씩 문자를 읽어보자
int totalIndex = 0;
int wordIndex = 0;
while(totalIndex < sLength){
//현재 단어의 현재 위치에서의 문자
char c = s.charAt(totalIndex);
//공백 문자이면 넘어가기
if(c == ' '){
//char배열에 문자를 저장
result[totalIndex] = c;
//공백이니까 단어 인덱스는 초기화
wordIndex = 0;
//전체 인덱스는 증가
totalIndex++;
continue;
}
if(wordIndex % 2 == 0){
//소문자이면 대문자로 변환
if(c >= 'a') {
c = (char)(c - ('a' - 'A'));
}
}else {
//대문자이면 소문자로 변환
if(c < 'a' && c >= 'A') {
c = (char)(c + ('a' - 'A'));
}
}
//char배열에 문자를 저장
result[totalIndex] = c;
//단어 인덱스는 증가
wordIndex++;
//전체 인덱스는 증가
totalIndex++;
}
//완성된 char배열을 String으로 변환해서 리턴
return new String(result);
}
}
String answer = "";
//원본 문자열의 길이
int sLength = s.length();
//변환된 문자들을 저장할 배열
char[] result = new char[sLength];
//문자열 처음부터 끝까지 하나씩 문자를 읽어보자
int totalIndex = 0;
int wordIndex = 0;
answer
을 초기화시킨다.
원본 문자열의 길이를 나타내는 sLength
변수에 s.length()
를 저장한다. 여기서 .length()
인 이유는 배열이 아니기 때문에 메서드를 사용한 것이다.
변환된 문자들을 저장할 result
를 선언한다. 인덱스의 크기는 원본 문자열의 길이만큼인 sLength
만큼 준다.
전체 인덱스를 나타내는 totalIndex
변수를 0
으로 초기화한다. result
에 문자 하나가 들어간다면 totalIndex++
를 수행한다.
단어 인덱스를 나타내는 wordIndex
변수를 0
으로 초기화한다. result
에 문자 하나가 들어간다면 wordIndex++
를 수행하지만 result
에 공백 문자가 들어간다면 wordIndex
를 0
으로 다시 초기화시킨다.
while(totalIndex < sLength){
//현재 단어의 현재 위치에서의 문자
char c = s.charAt(totalIndex);
전체 인덱스를 나타내는 totalIndex
부터 원본 문자열의 길이를 나타내는 sLength
이전까지 while문
을 반복한다.
char
형 c
에 인덱스 0
부터 원본 문자열의 인덱스 길이 이전까지의 s
의 문자를 하나씩 읽어 저장한다.
//공백 문자이면 넘어가기
if(c == ' '){
//char배열에 문자를 저장
result[totalIndex] = c;
//공백이니까 단어 인덱스는 초기화
wordIndex = 0;
//전체 인덱스는 증가
totalIndex++;
continue;
}
c
가 공백문자
이면 공백문자
그대로를 저장하는 if문
이다.
변환된 문자열을 저장할 result
배열에 c
를 저장한다.
공백
을 저장했기 때문에 단어 인덱스를 나타내는 wordIndex
는 0
으로 초기화시킨다.
반대로 전체 인덱스를 나타내는 totalIndex
는 초기화시키지 않고 ++
시킨다.
모든 연산을 마친 후 while문
의 끝부분으로 이동하여 다시 while문
을 반복시키는 continue
를 수행한다.
if(wordIndex % 2 == 0){
//소문자이면 대문자로 변환
if(c >= 'a') {
c = (char)(c - ('a' - 'A'));
}
else {
//대문자이면 소문자로 변환
if(c < 'a' && c >= 'A') {
c = (char)(c + ('a' - 'A'));
}
}
소문자는 대문자로, 대문자는 소문자로 변환하는 if문
이다.
c
에 저장된 문자가 'a'
보다 큰, 즉 소문자라면 c
에는 'a'
가 'A'
로 변할 수 있는 수인 32
를 c
에서 뺀 후, char
로 캐스팅해서 c
에 저장한다.
c
에 저장된 문자가 'a'
보다 작고 'A'
보다 큰, 즉 대문자라면 c
에는 'A'
가 'a'
로 변할 수 있는 수인 32
를 c
에서 더한 후, char
로 캐스팅해서 c
에 저장한다.
//char배열에 문자를 저장
result[totalIndex] = c;
//단어 인덱스는 증가
wordIndex++;
//전체 인덱스는 증가
totalIndex++;
}
c
의 값이 문자일 경우 수행하는 연산이다.
변환된 문자열을 저장할 result
배열에 소문자에서 대문자로, 대문자에서 소문자로 변환된 c
의 값을 저장한다.
단어 인덱스를 나타내는 wordIndex
는 공백이 아직 없기 때문에 증가시킨다.
전체 인덱스를 나타내는 totalIndex
를 증가시킨다.
totalIndex
가 원본 문자열의 길이를 나타내는 sLength
과 같아진다면 while문
을 빠져나온다.
//완성된 char배열을 String으로 변환해서 리턴
return new String(result);
완성된 char
배열을 String
으로 변환하는 new String()
를 사용하여 변환된 문자를 저장한 result
를 변환한 후 리턴한다.