이상한 문자 만들기_Java

컴투루·2022년 6월 22일
0

프로그래머스 Lv.1

목록 보기
13/38

연습문제

🔥 이상한 문자 만들기 🔥


👀 문제

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


✔️ 조건

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

👩‍💻 입력 & 🧙 출력

sreturn
"try hello world""TrY HeLlO WoRlD"

🙋‍♀️ 풀이

class Solution {
    public String solution(String s) {
        
        String[] a = s.split("\\s",-1);
        String[] c ={};
        StringBuffer b = new StringBuffer();
        for(int i=0;i<a.length;i++){
            c = a[i].split("");       
            
            for(int j=0;j<c.length;j++){
                if(j%2==0 || j==0){
                    b.append(c[j].toUpperCase());
                }else{
                    b.append(c[j].toLowerCase());
                }                  
            }
            if(i<a.length-1){
                b.append(" ");                    
            }
        }
    
        String answer = String.valueOf(b);
        return answer;
    }
}
  1. split을 이용해서 전체 문자열 s를 띄어쓰기를 기준으로 나누어 배열 a에 대입
  2. 그럼 이제 a = ["try","hello","world"]
  3. a의 길이만큼 반복하면서 배열 c에 a[i]번쩨를 split해서 대입
  4. c = ["t","r","y"]
  5. 또하나의 반복문을 돌리는데 이번에는 c의 길이만큼 반복하면서 j의 값이 짝수이거나 0일 경우에는 toUpperCase()를 통해 대문자로 이외에는 toLowerCase()로 소문자로 변경하여 StringBuffer인 b에 append해준다
  6. 마지막에 String.valueOf()로 b를 형변환 해준후 return!

처음에 예시에서 오류가 안나서 오! 하고 제출했는데 테스트케이스 4,5,8,9,11에서 오류가 났다.

마지막에 들어오는 공백은 아래에서 if문으로 제거했다고 생각했기때문에 한참동안 오류를 해결하지 못했다.

질문하기의 다른분의 글을 보고 상단에 배열 a에 값을 split해서 대입할때 -1을 함께 써주어야한다는것을 알았다.

결국은 성공...!
-1하나가 뭐라고 나를 힘들게 만들었을까

  • split(-1) : 공백을 제거하기 위한 것

💬 다른 풀이

class Solution {
  public String solution(String s) {
        char[] chars = s.toCharArray();
        int idx = 0;

        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == ' ')
                idx = 0;
            else
                chars[i] = (idx++ % 2 == 0 ? Character.toUpperCase(chars[i]) : Character.toLowerCase(chars[i]));
        }

        return String.valueOf(chars);
  }
}
  • String.toCharArray()
    - 문자열을 한 글자씩 쪼개서 char타입의 배열에 넣어주는 메서드
  1. toCharArray()메서드를 이용해서 문자열 s를 쪼개 담았다.
  2. chars의 길이만큼 반복문을 돌면서 만약 chars[i]번째가 공백이라면 idx에 0을 대입하고 아니라면 삼항연산자를 이용해서 chars[i]에 대입
  3. 마지막에 String.valueOf이용해서 String으로 만들어서 return!

👏 마무리

열심히 하자 ^^

profile
맘 먹으면 못할 게 없지

0개의 댓글