[오늘의 문제] 이상한 문자 만들기

shlim55·2025년 6월 20일

코딩테스트

목록 보기
82/223

출처: 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;
    }
}
profile
A Normal Programmer

0개의 댓글