프로그래머스 - 이상한 문자 만들기 (Level 1)

2023. 12. 30. 00:25코딩테스트 정리(자바)

728x90

처음 풀이

-> 각 단어는 하나 이상의 공백문자로 되어있습니다. 

이 조건으로 인해 틀림. 공백문자가 여러개 있을 수 있음.

import java.util.*;

class Solution {
    public String solution(String s) {
        //1. s를 StringToknizer에 담아 단어만 담기
        StringTokenizer st=new StringTokenizer(s);
        //2. 반복문으로 해당 인덱스에 맞게 변환하기
        String result="";
        StringBuilder sb=new StringBuilder();

        while(st.hasMoreTokens()){
            result=st.nextToken();
            for(int i=0;i<result.length();i++){
                char ch=result.charAt(i); //해당 인덱스 문자 가져오기
                if(i%2==0)//짝수번째 인덱스라면
                    sb.append(Character.toUpperCase(ch)); // 대문자로
                else //홀수번째 인덱스라면
                    sb.append(Character.toLowerCase(ch));// 소문자로
            }
            sb.append(" "); //단어 사이에 공백 넣기
        }
        //맨 뒤 공백은 제거
        sb.deleteCharAt(sb.length()-1);
        //StringBuilder 문자열로 반환
        String answer = sb.toString();
        return answer;
    }
}

 

1. hasMoreTokens() 
: StringTokenizer 클래스 객체에서 다음에 읽어 들일 token이 있으면 true, 없으면 false를 return한다.

2. nextToken()
: StringTokenizer 클래스 객체에서 다음토큰을 String 타입으로 반환

3. str.toUpperCase()
: 대상 문자열 str을 대문자로 변환

4. StringBuilder 클래스에서 제공하는 메서드를 사용하여  StringBuilder의 마지막 문자를 제거하는 방법
-> sb.deleteCharAt(sb.length() - 1);
: deleteCharAt() 메서드는 특정 위치의 문자를 제거



 

두번째 풀이

: 공백문자를 일일히 체크하기로 수정


class Solution {
    public String solution(String s) {
        // StringBuilder 사용
        StringBuilder sb = new StringBuilder();

        int offset = 0; //단어마다 짝/홀수 판단할 인덱스
        char[] ch = s.toCharArray(); //char 배열로 변환
        for (int i = 0; i < ch.length; i++) {
            if (ch[i] == ' ') {//공백인지 확인
                sb.append(ch[i]);
                offset = 0; // offset은 0으로 초기화
                continue;
            } else { //문자라면 이제 단어 시작
                if (offset % 2 == 0) {//offset이 짝수라면
                    sb.append(Character.toUpperCase(ch[i])); //대문자로 추가
                } else { //offset이 홀수라면
                    sb.append(Character.toLowerCase(ch[i])); //소문자로 추가
                }
                offset++; //offset 중가
            }
        }
        String answer = sb.toString(); // StringBuilder -> 문자열로 변환
        return answer;
    }
}

 

1. 문자열 말고 문자도 대문자로 바꾸는 메소드가 있다 
: Character.toUpperCase(ch[i]);

728x90