Lee's Grow up

[자바/알고리즘] 프로그래머스 이상한 문자 만들기 본문

알고리즘/프로그래머스

[자바/알고리즘] 프로그래머스 이상한 문자 만들기

효기로그 2019. 10. 31. 10:21
반응형

문제


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

제한 사항


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

입출력 예


s return
"try hello world" "TrY HeLlO WoRlD"

입출력 예 설명


"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니. 따라서 "TrY HeLlO WoRlD"를 리턴합니다.

나의 풀이


class Solution {
  public String solution(String temp) {
		int index = 0;
		char[] charArr = temp.toCharArray();
		for (int i = 0; i < charArr.length; i++) {
			char tempChar = charArr[i];
			if(tempChar == 32) {
				index= 0;
				continue;
			}
			if (index++ % 2 == 0) {
				if (tempChar >= 97 && tempChar <= 122) {
					charArr[i] -= 32;
				}
			} else {
				if (tempChar >= 65 && tempChar <= 90) {
					charArr[i] += 32;
				}
			}
		}
      return String.valueOf(charArr);
  }
}

개인적으로 주어지는 단어 temp에 공백이 연속일 수 있다는 조건에 없어서

당연히 문자와 문자 사이의 구분은 공백 하나로 주어지는줄 알고 split( ) 메소드로 접근을해서 풀이를 했었다.

그런데 오류가 발생해서 보니... test case에는 공백이 연속으로 주어지는 경우가 있어서 문제가 발생...

문제에 따로 표시를 해주면 좋겠다만 아무튼 전체 문자를 char[ ] 로 변환 시켜주고 아스키 코드로 접근했다.

 

여기서 index 변수는 문자의 홀수,짝수를 구분하기 위해 주어진 변수이고,

if(tempChar == 32) 즉 해당 문자가 ' '(공백) 일 경우 0으로 초기화해준다. 그러면서 공백이 아닐 경우

tempChar >= 97 && tempChar <= 122 즉 소문자일 경우 -32를 해줘서 대문자로,

tempChar >= 65 && tempChar <= 90 즉 대문자일 경우 +32를 해줘서 소문자로

변환해주고 마지막 return 타입이 String이기 때문에 값을 변환해줘서 리턴을 합니다.

반응형
Comments