문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백 문자로 구분되어 있습니다. 각 단어의 짝수 번째 알파벳은 대문자로, 홀수 번째 알파벳은 소문자로 바꾼 문자열을 리턴 하는 함수, solution을 완성하세요.
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야 합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수 번째 알파벳으로 처리해야 합니다.
s | return |
---|---|
"try hello world" | "TrY HeLlO WoRlD" |
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
int index = 0;
for(int i = 0; i < s.length(); i++){
if(s.substring(i, i+1).equals(" ")) {
answer = answer.concat(" ");
index = 0;
}
else {
if(index % 2 == 0 && Character.isLowerCase(s.charAt(i))){
answer = answer.concat(s.substring(i, i+1).toUpperCase());
index++;
}
else if(index % 2 == 1 && Character.isUpperCase(s.charAt(i))){
answer = answer.concat(s.substring(i, i+1).toLowerCase());
index++;
}
else {
answer = answer.concat(s.substring(i,i+1));
index++;
}
}
}
return answer;
}
}
💡 반복문을 s의 길이만큼 돌리면서 substring()으로 한 문자씩 잘라 주는데 만약 자른 문자가 공백이라면 그대로
answer
에 concat()으로 연결시켜 주었다
💡
index
는 단어를 대문자 혹은 소문자로 바꿀 때 그 단어의 인덱스를 확인하기 위한 변수이다 자른 문자가 공백일 때는 별다른 인덱스가 필요하지 않으니 0으로 초기화시켜 준다 만약 자른 문자가 단어의 알파벳일 때, 짝수 인덱스 문자가 대문자이거나 홀수 인덱스가 소문자라면 별다른 처리 없이 concat()으로answer
에 연결시켜 주며 다음 인덱스의 문자를 확인하기 위해index
만 +1 해 준다 만약 짝수 인덱스일 때 자른 문자가 소문자라면 대문자로 바꾼 후answer
에 연결시켜 주며, 홀수 인덱스일 때 자른 문자가 대문자라면 소문자로 바꾼 후answer
에 연결을 시켜 준다 이 경우들 또한 다음 인덱스의 문자를 위해index
에 +1을 해 주게 된다
나는 이 점수를 주는 기준이 무엇인지 궁금하다... 🤔 이 문제는 여기에 첨부한 코드를 짜는 데는 정말 몇 분 안 걸렸지만 고민을 꽤 많이 했던 문제이다 처음엔 StringTokenizer로 풀었는데 그럼 공백의 처리가 애매해져서 처음에 제출했을 때 하나 빼고 다 실패였었다... 그리고 split도 사용해 보려고 했는데 split을 이용해 푸는 데에 딱히 아이디어가 떠오르지 않아서 실패한 이유를 토대로 여기 첨부한 코드처럼 그냥 단순 조건문만 이용해서 짜 보았다 하지만 이 문제에 대한 힌트에 split을 사용하라는 걸 보면 아무래도 split을 사용했어야 좀 더 나았을까 싶다...