[Programmers] 이상한 문자 만들기 -JAVA

Lee 🧙🏻‍♂️·2021년 9월 1일
0
post-thumbnail
post-custom-banner

📄 문제 설명

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

📑 제한 사항

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

📇 입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

👨🏻‍💻 내가 처음 작성한 코드

class Solution {
    public String solution(String s) {
        String answer = "";
	int str = 0;
    
	for(int i = 0; i < s.length(); i++) {
	    if(i % 2 == 0) {
	    	str = s.charAt(i);
	    	answer += (char)(str-32);
	    }else {
	    	str = s.charAt(i);
	    	if(str > 64 && str < 91) {
	    		 answer += (char)(str+32);
	    }else {
	    	 answer += s.charAt(i);
	    }
	    }
	 }
	     return answer.replaceAll("\u0000", " "); //programmers에서 코드 실행을 눌렀을 때 
         					      //공백에 \u0000이라는 코드가 적혀서 삭제 해 줌.
    }
}

ASCII코드를 써서 풀면 간단하게 풀릴거라고 생각했고 코드 실행버튼을 클릭 했을때도 잘 넘어갔다.
근데... 제출 버튼을 클릭하니..

..🤷🏻‍♂️ 뭐지..? 다시 풀어 봐야겠다..

💡 아 문제에 문자열의 인덱스가 기준이 아니라 공백을 기준이라고 나와있다ㅋㅋㅋ...

👨🏻‍💻 다시 작성한 코드

import java.util.*;
class Solution {
	 public static String solution(String s) {
	     String answer = "";
	     int c = 0;
	     int cnt = 0;
	     
	     for(int i = 0; i < s.length(); i++) {
	    	 c = s.charAt(i);
	    	 if(c == 32) {
	    		 answer += (char)c;
	    		 cnt = 0;
	    	 }else if(cnt % 2 == 0) {
	    		 if(c > 96 && c < 123) { //소문자 라면
	    			 answer += (char)(c - 32);
	    			 cnt++;
	    		 }else { // 대문자면 그냥 +
	    		 answer += s.charAt(i);
	    		 cnt++;
	    		 }
	    	 }else { // 홀수 
	    		 if(c > 64 && c < 91) { // 대문자면
	    			 answer += (char)(c + 32); //소문자로 만들기
		    		 cnt++;
	    		 }else {
	    			 answer += s.charAt(i); // 대문자면 그냥 +
		    		 cnt++;
	    		 }
	    	 }
	     }
	     return answer;
	 }
     }

👨🏻‍🏫 풀이

이 문제의 요점은 짝수 홀수의 기준이 문자열의 인덱스가 아니라 공백이 기준인 것이다.
ASCII코드를 써서
1. if(c == 32) 공백이라면 공백 기준으로 인덱스를 초기화 한다. cnt = 0;
2. if(cnt % 2 == 0)인덱스가 짝수일 때 소문자라면 대문자로 만들어 주고 cnt 를 증가 시킨다.
3. 반복한다.

💡 다른 사람 코드

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;
  }
}

💡 느낀 점

나도 처음에는 저런 방식으로 해 보려고 했었는데 잘 안되서 ASCII코드를 쓴건데... 저런 식으로 간단하게 할 수 있다니.. 약간 허무하지만.. 하나를 배웠다고 생각해야지..ㅠ

profile
더 나은 개발자가 되기 위해 기록합세!🧙🏻‍♂️
post-custom-banner

0개의 댓글