이상한 문자 만들기

문제정의


공백을 기준으로 만든 단어의 홀수번째는 소문자 짝수번째는 대문자로 바꾸어 출력하는 문제이다. 필자는 문제를 읽고 당연히 모든 문자는 알파벳이라 가정하고 풀었는데 틀렸다,, 알고보니 여러 공백이 들어가 있을 수도 있다는 글을 읽고 다시 풀어서 정답을 얻었다.

문제풀이


전체 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class MakeStrangeStr {

//프로그래머스 level1 이상한 문자 만들기
public static void main(String[] args)
{
String s = "try hello world";
StringBuffer buff = new StringBuffer();
int j = 0;
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
String st = Character.toString(c);
if(st.equals(" "))
j = 0;
if (c >='A' && c <= 'Z' || c >= 'a' && c <= 'z')
{
if(j%2 == 0)
st = st.toUpperCase();
else
st = st.toLowerCase();
j++;
}
buff.append(st);

}
String answer = buff.toString();
System.out.print(answer);
}

}

문자열에서 문자를 하나하나 뗀다. 또는 toCharArray()로 char배열을 생성해도 된다. 여기서 j라는 숫자는 단어를 공백에 맞춰 잘랐을 때, 단어의 인덱스를 나타내기 위함이다. 공백을 만났을 경우 이 j는 0으로 초기화된다. 알파벳을 만났을 경우 짝수나 홀수냐에 따라 대문자 또는 소문자로 바꿔준다. 나중에 다른사람의 풀이를 보니 단어를 이루고있는 요소들 중에 숫자나 특수문자는 없는 것 같았다. 하지만 테스트 케이스를 정확히 알 수 없기 때문에 필자는 문자인가에 대한 확인도 추가로 해주었다. 이렇게 변환한 문자열을 버퍼에 넣어 스트링으로 바꾸면 완성이다. 총 시간복잡도는 \(O(n)\)이다.

테스트