이상한 문자 만들기 (자바)

김재현·2023년 11월 11일
0

알고리즘 풀이

목록 보기
13/89
post-thumbnail
post-custom-banner

문제

정답 코드1

    public String solution(String s) {
        boolean evenOrNot = true;
        char[] charArray = new char[s.length()];

        for (int i = 0; i < s.length(); i++) {

            if (s.charAt(i) == ' ') {
                charArray[i] = s.charAt(i);
                evenOrNot = true;
            } else {
                if (evenOrNot) {
                    charArray[i] = 'A' <= s.charAt(i) && s.charAt(i) <= 'Z' ? s.charAt(i) : (char) (s.charAt(i) - 32);
                    evenOrNot = false;
                } else {
                    charArray[i] = 'a' <= s.charAt(i) && s.charAt(i) <= 'z' ? s.charAt(i) : (char) (s.charAt(i) + 32);
                    evenOrNot = true;
                }
            }
        }
        return String.valueOf(charArray);
    }

알고리즘 문제를 오랜만에 풀어서 한참 헤메다가 풀었다!!

배열을 하나 만들어놓고,
(배열 크기는 초기화 할 때 정해줘야 하기 때문에 s.length() 로 넣어줬다.)

빈칸 일 때는 그냥 넣어주고,
빈칸이 아닐때는 evenOrNot로 짝수인지 판단한 뒤, 대소문자를 알맞게 변형해준다.

마지막으로 이전에 배웠던 String.valueOf() 로 배열을 string으로 바꿔줬다.

막히거나 오래 걸렸던 부분은...

'A' <= s.charAt(i) && s.charAt(i) < 'Z'

라고 쓴게 보였다.

'A' <= s.charAt(i) && s.charAt(i) <= 'Z'

이렇게 했어야지!! 이녀석 멍청한 녀석 실수를 줄이자. 실수도 실력이다.

다른 사람의 풀이를 보고...

split method 라는게 있어서 s.split("") 라고 하면 string을 array로 바꿔주는게 있더라.

"(내용)" (내용)을 기준으로 문자열을 나눠서 문자열의 배열로 만들어줌.

<예시>

String str2 = "서울,대전,대구";
String[] cityArr = str2.split(",");

for (int i = 0; i < cityArr.length; i++){
    System.out.println(cityArr[i]);
}
서울
대전
대구

그냥 "" 으로 선언하면 전부 다 나눠버림.

String에 대해 toUpperCase는 대문자, toLowerCase는 소문자로 바꿔주는 기능도 있고..!

.toUpperCase(); -> 소문자만 대문자로
.toLowerCase(); -> 대문자만 소문자로
.trim(); -> 공백 제거

그걸 보고는 나도 따라 써봤다. (향상된 for문도!)

정답 코드2

    public String solution(String s) {
        boolean evenOrNot = true;
        String[] array = s.split("");
        String answer="";

        for(String a : array) {
            a = a.equals(" ") ? a : (evenOrNot ? a.toUpperCase() : a.toLowerCase());
            evenOrNot = a.equals(a.toLowerCase()); //빈칸 -> true, 소문자-> true, 대문자-> false
            answer+=a;
        }

        return answer;
    }

evenOrNot이 아니라, count라는 변수를 선언해도 된다.
count%2==0 에 대해 판단 한 뒤, 대소문자로 바꿔주는 로직.

profile
I live in Seoul, Korea, Handsome
post-custom-banner

0개의 댓글