문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
입출력 예 설명
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다.
각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
public class 이상한문자만들기 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(solution("try hello world"));
}
public static String solution(String s) {
String answer = "";
StringBuilder sb = new StringBuilder();
int index=0;
for(int i=0; i<s.length(); i++) {
if(s.charAt(i) == ' ') {
sb.append(' ');
index=0;
}else {
if(index%2==0) {//짝수
sb.append(Character.toUpperCase(s.charAt(i)));
index++;
}else { //홀수
sb.append(Character.toLowerCase(s.charAt(i)));
index++;
}
}
}
answer = sb.toString();
return answer;
}
}
(참고)
StringBuilder 사용법 및 사용하는 이유
자바에서 문자열하면 자연스럽게 String이 떠오른다.
String은 소위 불변(immutable)객체라고 한다. String str1 = "abc";, String str2 = "def"; 2개의 String객체가 있을 때, 만약 str1 + str2;와 같은 연산을 하게 되면 새로운 String을 생성한다.
즉, String객체와 String객체를 더하는(+)행위는 메모리 할당과 메모리 해제를 발생시키며 더하는 연산이 많아진다면 성능적으로 좋지 않다.
그래서 나온 것이 StringBuilder이다.
이름만 봐도 String 잘 만들게(?) 생겼다.
StringBuilder는 String과 문자열을 더할 때 새로운 객체를 생성하는 것이 아니라 기존의 데이터에 더하는 방식을 사용하기 때문에 속도도 빠르며 상대적으로 부하가 적다.
따라서 긴 문자열을 더하는 상황이 발생할 경우 StringBuilder를 적극적으로 사용하면 되겠다.
사용법
StringBuilder에는 append()가 있는데, 이는 문자열을 더하는 역할을 한다.
만들어진 문자열을 출력하기 위해서는 StringBuilder의 인스턴스인 sb의 toString()을 부르자.
예제이므로 짧은 문자열을 더했지만, 빈번하게 긴 문자열들을 더해야 할 경우 효과적이다.
'Other > 코테 문제' 카테고리의 다른 글
[코테] 같은 숫자는 싫어 - "첫값넣고, 비교" (0) | 2021.04.26 |
---|---|
[코테] 나누어 떨어지는 숫자 배열 - "Arrays.sort(~)" (0) | 2021.04.26 |
[코테] 서울에서 김서방 찾기 (0) | 2021.04.25 |
[코테] 수박수박수박수? - "i%2==0" (0) | 2021.04.25 |
[코테] 문자열 내림차순으로 배치하기 - "String[] array = s.split("")","String.join("",array)" (0) | 2021.04.23 |