Algorithm/programmers

이상한 문자 만들기

마닐라 2021. 12. 2. 16:39

📍 문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.제한 사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예sreturn

"try hello world" "TrY HeLlO WoRlD"

입출력 예 설명

"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

 

💡 접근

공백을 기준으로 단어를 나눠서 해당 공백을 저장하는 배열을 따로 만들려 했는데 그럴 필요가 없었다.

단어가 끝나고나서 그냥 공백을 붙여주면 되므로..

마지막 단어가 끝나고나서 공백이 1개이상 있으면 배열 처리가 되지 않는 문제가 있었다.

[asd     ]라는 단어가 있다면 배열에 asd만 들어가는 것....

그래서 split 메서드에 2번째 인자로 음수로(0보다 작은 정수) 줘서 모든 구분값을 나눠서 배열로 반환하도록했다.

그래서 마지막 부분의 공백도 배열로 들어가서 공백이 적절하게 들어갔다!

👩‍💻 코드

//내 풀이
import java.util.*;

class Solution {

    public static String solution(String s) {
        String answer = "";

        s = s.toLowerCase();

        String[] split = s.split(" ", -1);

        for(int i = 0; i < split.length; i++) {
            //System.out.println(split[i]);
            for(int j = 0; j < split[i].length(); j++) {
                char[] arr = new char[split[i].length()];
                //짝수면 대문자로
                if(j % 2 == 0) {
                    arr[j] = (char) (split[i].charAt(j) - 32); //A
                    answer += arr[j];
                } else {
                    answer += split[i].charAt(j);
                }
            }
            if(i == split.length -1) break;
            answer += " ";
        }
        System.out.println(answer);

        return answer;
    }

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);

        String[] a = {"Jane", "Kim"};
        int n = 1;

        solution("asd  ");

    }
}

 

//다른 사람 풀이