본문 바로가기
Coding Test/Java Coding Test

[프로그래머스 / 자바] - 이상한 문자 만들기

by nam_ji 2024. 2. 19.

이상한 문자 만들기

문제

  • 문자열 s가 매개변수로 주어집니다.
  • s는 한 개 이상의 단어로 구성되어 있고,
  • 각 단어는 하나 이상의 공백으로 구분되어 있고,
  • 각 단어 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로
  • 바꾼 문자열을 출력하는 문제입니다.


테스트 (인텔리제이)

  • s를 문자별로 자르고
  • for문을 돌려 각 문자의 위치를 idx로 구분하고 그 값이 홀수면 소문자를 짝수면 대문자를 빈칸이라면 idx값을 0이 들어가도록 했습니다.
  • 다른 사람 풀이 중에서 더 좋은 코드가 있어 가져와 봤습니다.
  • 위 과정을 모두 삼항연산자를 이용하여 푸는 방법과
  • 문자열을 각 문자를 char 배열에 담아서 푸는 방법이 있습니다.
  • 여기서 char 배열에 담아서 푸는 방법이 가장 빠르다고 나왔습니다. 
public class Main {
    public static void main(String[] args) {
        /*
        문자열 s가 매개변수로 주어집니다.
        s는 한 개 이상의 단어로 구성되어 있고,
        각 단어는 하나 이상의 공백으로 구분되어 있고,
        각 단어 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로
        바꾼 문자열을 출력하는 문제입니다.
        "try hello world" > "TrY HeLlO WoRlD"
         */
        String s = "try hello world";
//        String[] ss = s.split("");
//        String answer = "";
        char[] c = s.toCharArray();
        int idx = 0;

        for (int i = 0; i < c.length; i++) {
            if (c[i] == ' ') {
                idx = 0;
            } else {
                c[i] = (idx++ % 2 == 0 ? Character.toUpperCase(c[i]) : Character.toLowerCase(c[i]));
            }
        }
        System.out.println(String.valueOf(c));

//        for (String str : ss) {
//            idx = str.contains(" ") ? 0 : idx + 1;
//            answer += idx % 2 == 0 ? str.toLowerCase() : str.toUpperCase();
//        }
//        System.out.println(answer);

//        for (int i = 0; i < ss.length; i++) {
//            if (ss[i].equals(" ")) {
//                idx = 0;
//            } else if (idx % 2 == 0) {
//                ss[i] = ss[i].toUpperCase();
//                idx++;
//            } else if (idx % 2 != 0) {
//                ss[i] = ss[i].toLowerCase();
//                idx++;
//            }
//            answer += ss[i];
//        }
//        System.out.println(answer);
    }
}

프로그래머스 코드

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] ss = s.split("");
        int idx = 0;
        for (int i = 0; i < ss.length; i++) {
            if (ss[i].equals(" ")) {
                idx = 0;
            } else if (idx % 2 == 0) {
                ss[i] = ss[i].toUpperCase();
                idx++;
            } else if (idx % 2 != 0) {
                ss[i] = ss[i].toLowerCase();
                idx++;
            }
            answer += ss[i];
        }
        return answer;
    }
}