출처: https://school.programmers.co.kr/learn/courses/30/lessons/12930
문제 설명
문자열 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 = "";
// 각 단어는 하나 이상의 공백문자로 구분되어 있습니다.
// 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴
// 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
String arr[] = s.split(" " ,-1);
for(int i = 0; i < arr.length; i++){
StringBuilder sb = new StringBuilder();
String word = arr[i];// 단어 하나
for(int j = 0; j < arr[i].length(); j++){
char ch = word.charAt(j);
if(j % 2 == 0){
sb.append(Character.toUpperCase(ch));
} else {
sb.append(Character.toLowerCase(ch));
}
}
answer += sb.toString();
if(i != arr.length - 1) answer += " ";// 단어간 공백 추가
}
return answer;
}
}
처음에 난리가 아니였다.
맨처음에 split()함수 사용해서 arr 배열에 저장해야 한다는 생각을 못했다.
split()함수도 limit을 정해 -1로 하면 마지막 공백도 저장 가능하다는거를 몰랐다.
String[] arr = s.split(" ", -1); // 공백 유지!
문제를 잘못 이해해서 전체 문자열중 짝수 홀수로 착각함
그리고 스트링 빌더를 사용해 문자 하나하나 스트링 빌더에 append 해야 한다는것도 아직 익숙하지 않았다.
그리고 단어 변수를 초기화 하여 각 단어 index 별로 짝수냐 홀수냐에 따라 문자 변환도 해야 하는것도
안쪽 반복문 밖에 word 변수 선언,
안쪽 반복문 안에 ch 변수 선언 하는것도 아직 센스가 먼거 같다;;
String word = arr[i];// 단어 하나
char ch = word.charAt(j);
마지막으로 마지막 단어 빼고 다 단어간 공백 추가하는것도
다른 사람의 풀이
class Solution {
public String solution(String s) {
String answer = "";
int cnt = 0;
String[] array = s.split("");
for(String ss : array) {
cnt = ss.contains(" ") ? 0 : cnt + 1;
answer += cnt%2 == 0 ? ss.toLowerCase() : ss.toUpperCase();
}
return answer;
}
}
class Solution {
public String solution(String s) {
char[] chars = s.toCharArray();
int idx = 0;
for (int i = 0; i < chars.length; i++) {
if (chars[i] == ' ')
idx = 0;
else
chars[i] = (idx++ % 2 == 0 ? Character.toUpperCase(chars[i]) : Character.toLowerCase(chars[i]));
}
return String.valueOf(chars);
}
}
class Solution {
public String solution(String s) {
String answer;
answer = s.toUpperCase();
char[] chars = answer.toCharArray();
//앞문자가 대문자라면 소문자로 치환
for (int i = 1; i < chars.length; i++) {
if (62 <= chars[i - 1] && chars[i - 1] <= 90) {
chars[i] = Character.toLowerCase(chars[i]);
}
}
answer = String.valueOf(chars);
return answer;
}
}