[Study] 프로그래머스 lv.1 이상한 문자 만들기(74%)

ayboori·2023년 7월 4일
0

Java Study

목록 보기
11/34

https://school.programmers.co.kr/learn/courses/30/lessons/12930

문제 설명

풀이 로직

  1. String > StringBuilder 변환 (내부 함수를 사용하고 싶어서!)
  2. evenNum 플래그 세팅 (짝수번째 인덱스에서 true / 초기값 true)
  3. StringBuilder 크기만큼 루프 돌며 검사
    3-1. 해당 인덱스의 char이 공백이면 플래그 true / 검사 그만
    3-2. 플래그가 true > 해당 char 대문자로 변경 / 플래그 false로 세팅
    3-3. 플래그가 false > 해당 char 소문자로 변경 / 플래그 true로 세팅
  4. 정답을 toString으로 변환하여 리턴

내가 작성한 풀이

class Solution {
    public String solution(String s) {
        StringBuilder input = new StringBuilder(s); // StringBuilder의 함수를 사용하기 위해 변경

        boolean evenNum = true; // 짝수 번째 인덱스일 때 true

        for(int i = 0; i<input.length(); i++){
            if(input.charAt(i) == ' '){ // 공백일 경우 짝수 인덱스로 세팅하고 더 이상 검사 X
                evenNum = true;
                continue;
            }

            if(evenNum){ // 짝수 번째 인덱스
                input.setCharAt(i,Character.toUpperCase(input.charAt(i))); // 해당 char 대문자로 변경
                evenNum = false; // 플래그 세팅
            }else{ // 홀수 번째 인덱스
                input.setCharAt(i,Character.toLowerCase(input.charAt(i))); // 해당 char 소문자로 변경
                evenNum = true; // 플래그 세팅
            }
        }
        return input.toString(); // String으로 변경해서 리턴
    }
}

통과 시간

0.07ms ~ 0.16ms

테스트 1 〉	통과 (0.08ms, 72.9MB)
테스트 2 〉	통과 (0.07ms, 80.1MB)
테스트 3 〉	통과 (0.07ms, 78.4MB)
테스트 4 〉	통과 (0.14ms, 75.3MB)
테스트 5 〉	통과 (0.09ms, 74.4MB)
테스트 6 〉	통과 (0.05ms, 74.2MB)
테스트 7 〉	통과 (0.08ms, 73.5MB)
테스트 8 〉	통과 (0.15ms, 73.8MB)
테스트 9 〉	통과 (0.08ms, 73MB)
테스트 10 〉	통과 (0.13ms, 73.5MB)
테스트 11 〉	통과 (0.13ms, 75.7MB)
테스트 12 〉	통과 (0.16ms, 79MB)
테스트 13 〉	통과 (0.08ms, 70.9MB)
테스트 14 〉	통과 (0.05ms, 76.3MB)
테스트 15 〉	통과 (0.11ms, 77.5MB)
테스트 16 〉	통과 (0.13ms, 72.6MB)

다른 사람의 풀이

class Solution {
  public String solution(String s) {

        String answer = "";
        int cnt = 0;
        String[] array = s.split("");

        for(String ss : array) {
            cnt = ss.contains(" ") ? 0 : cnt + 1; // 공백 있으면 인덱스++ 안 함
            answer += cnt%2 == 0 ? ss.toLowerCase() : ss.toUpperCase(); 
        }
      return answer;
  }
}

split을 사용해서 단어를 하나하나의 문자열로 변경했다.
= s.toCharArray()

++) split(" ")을 하면 공백이 모두 사라진다!

profile
프로 개발자가 되기 위해 뚜벅뚜벅.. 뚜벅초

0개의 댓글