본문 바로가기
코테 문풀/99club

[99Club 1기] TIL 코딩테스트 스터디 Day 11 [JAVA + 비기너]

by seoni00 2024. 4. 4.

안녕하세요!!

우당탕탕 개발중인

seoni입니다~

 

오늘도 TIL(Today I Learned) 포스팅 해볼께요!


오늘의 JAVA 비기너 문제입니다!

문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/12930

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

틀린 코드

 

import java.util.*;

class Solution {
    public String solution(String s) {
        String answer = "";
        StringTokenizer st = new StringTokenizer(s, " ");
       
       while(st.hasMoreTokens()){
           String token = st.nextToken();
           char[] array = token.toCharArray();
           for(int i = 0; i < array.length; i++){
                if(i % 2 == 0){
                    array[i] = Character.toUpperCase(array[i]);
                }
                else{
                    array[i] = Character.toLowerCase(array[i]);
                }
               answer += array[i];
               
           }
           if(st.hasMoreTokens() == false && s.charAt(s.length()-1) != ' '){
                    break;
           }
           else
            answer += " ";
        }
        return answer;
    }
}

어쩌다보니 코드가 너무 길어졌는데...

사실 처음에 풀 때는 저렇게 접근하지 않았어요ㅠ

 

그냥 단순하게 s.length까지 for문 돌려서,

짝수일 때는 대문자로, 홀수일 때는 소문자로 만들어야겠다 라고 생각했었어요.

그런데 문제를 보니까 공백(" ")을 기준으로 단어가 나뉘어 있었고,

그 단어 내에서 짝수일 때와 홀수일 때를 구분해야했습니다.

 

저는 여기서 약간 멘붕왔어요🤯

아무리 생각해도 토큰을 이용해야 할 것 같았기 때문이죠.

그래서 저렇게 긴 코드가 나왔답니다..허허

 

문제는, 저거 테스트 코드 몇개 안돌아요.

왜냐하면 주어진 문자열이 "try hello world"일 수도 있지만

"try hello world "하고 공백이 들어있는 것일 수도 있거든요.

 

근데 도저히 위 코드로는 그 경우를 다루기 어렵더라구요.

(그래도 덕분에..토큰 공부하고 좋았습니다..)

 

그래서 제가 처음에 생각했던 것에서

좀 더 발전시키면 좋을 것 같았어요.

 

올바른 코드

import java.util.*;

class Solution {
    public String solution(String s) {
        String answer = "";
        char[] array = s.toCharArray();
        int flag = 0; //짝수 홀수 구분용
        
        for(int i = 0; i < array.length; i++){
            if(array[i] == ' '){
                flag = 0;
                continue;
            }
            if(flag % 2 == 0){
                array[i] = Character.toUpperCase(array[i]);
            }
            else{
                array[i] = Character.toLowerCase(array[i]);
            } 
            flag++;
        }
        answer = String.valueOf(array);
        return answer;
    }
}

바로 문자열 for문은 그대로 유지한채,

짝수 홀수를 구분할 수 있는 변수를 따로 두고, continue를 이용하는 방법이었습니다!

 

훨씬 깔끔하죠?!


오늘 삽질하느라 정말 힘들었는데,

그래도 코드를 해석하고 토큰 함수도 알게되고

유익한 시간이었습니다!

 

여러분도 오늘도 유익한 정보 되셨나요?!

그럼 다음 포스팅도 기대해주세요!😆