문제 설명
문자열 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 = "";
return answer;
}
}
정답 코드
class Solution {
public String solution(String s) {
String answer = "";
String str[]=s.split("");
int cnt=0; //단어 인덱스 번호
for(int i=0; i<str.length; i++){
if(str[i].equals(" ")){ //공백인 경우
cnt=0;
}
else {
if(cnt%2==0){
cnt++;
str[i]=str[i].toUpperCase();
}
else{
cnt++;
str[i]=str[i].toLowerCase();
}
}
answer+=str[i];
}
return answer;
}
}
코드 설명
split
특정 문자열을 기준으로 문자열을 자르는 것 / 우리는 s문자열을 공백을 기준으로 단어를 나눠야 한다. 따라서
s.split(" ")이라고 쓴다.
equals()
equals() 메소드는 객체끼리 내용을 비교한다. 우리는 굳이 왜 ==을 두고 equals를 써야하는지 잘 모를 수도 있지만 실제로 ==을 쓰게 되면 정확도가 처참하게 나오는 것을 확인할 수 있다. 그 이유는 ==는 주소값을 비교하기 때문이다. 조건문에서 공백과 str[i]를 비교한 이유는 만약 공백일 경우에는 cnt를 0으로 주어 초기화를 시킨 후 다시 단어를 0부터 하나씩 비교해야하기 때문이다.
즉 공백이 지나고 새로운 단어가 나올 때마다 단어의 인덱스 방을 바꿔준다.
toUpperCase()
특정 문자를 대문자로 바꿔줄 때 사용한다.
toLowerCase()
특정 문자를 소문자로 바꿔줄 때 사용한다.
전체적인 로직
1) 문자열을 공백을 기준으로 나눠준다
2) 반복문을 단어의 수대로 돌린다.
3) 공백인 경우를 찾아 인덱스를 0으로 바꿔준다.
4) 단어가 홀수일 때, 짝수일 때를 구분하여 대문자와 소문자로 바꿔준다.
'programmers-코딩테스트 연습 > Level 1. 자바' 카테고리의 다른 글
2021-06-10 / 자릿수 더하기 (0) | 2021.06.10 |
---|---|
2021-06-10 / 자연수 뒤집어 배열로 만들기 (0) | 2021.06.10 |
2021-06-09 / 약수의 합 (0) | 2021.06.09 |
2021-06-08 / 수박수박수박수박수박수? (0) | 2021.06.08 |
2021-06-08 / 문자열을 정수로 바꾸기 (0) | 2021.06.08 |