프로그래머스 연습문제 풀이 : 이상한 문자 만들기

이상한 문자 만들기


문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 

각 단어의 짝수번째 알파벳은 대문자로,  홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수 solution을 완성하세요.


제한 사항

문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.


입출력 예

 s

return 

 try hello world

TrY HeLlO WoRlD


입출력 예 설명

try hello world는 세 단어 try, hello, world로 구성되어 있습니다. 

각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 TrY, HeLlO, WoRlD입니다. 

따라서 TrY HeLlO WoRlD 를 리턴합니다.



나의 풀이

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
class Solution {
  public String solution(String s) {
     String answer = "";
          
          char[] charArr = s.toCharArray();
          int arrLength = charArr.length;
          char space = ' ';
          int wordNum = 1;
          for(int i =0; i<arrLength; i++) {
              if(charArr[i]==space) {
                  //공백일때처리
                  wordNum=1;
                  continue;
              }
              String temp = new String(charArr[i]+"");
              if(wordNum%2==0) {
                  //짝수 -> 대문자
                  temp = temp.toLowerCase();
                  charArr[i] = temp.charAt(0);
              }else {
                  //홀수 -> 소문자
                  temp = temp.toUpperCase();
                  charArr[i] = temp.charAt(0);
              }
              
              wordNum++;
          }
          answer = new String(charArr);
          return answer;
  }
}
cs



풀이 설명


저는 이문제를 읽어봤을때 단번에 중요하다고 생각했던 것이

공백으로 구분된 단어를 읽어왔을때 각 단어의 첫문자를 어떻게 첫번쨰 문자로 인식하도록 프로그래밍을 할까?

중요한 부분입니다. 이부분을 어떻게 설계하느냐에 따라 변수의 자료형이 달라지게 됩니다. 저같은 경우는 그냥 wordNum이라는 int 형변수를 이용해서 공백문자를 읽었을 때는 1로 초기화하였고, isStart라는 boolean형 변수를 사용해서 문제를 풀이할 수도 있습니다.


input 데이터가 들어오면 이것을 모두 char배열로 쪼갰고, 전체 문장을 공백문자로 구분하면 어차피 동일할것 같아서 split을 사용하지 않고 toCharArray를 사용했습니다. 또한 split으로 쪼개서 진행할 경우는 if문의 depth가 2단계이상 깊어져서 개인적으로 좋아하지 않았습니다.


쪼갠 문자데이터들을 공백인지 아닌지 판단, 홀수번쨰인지 짝수번째인지 wordNum변수를 이용해서 판단하여 String으로 변환하고 toUpper, toLower를 적절히 활용하여 반환할 변수에 대입하였습니다.



다른사람의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
  }
}
 
cs


- String으로 받은 데이터를 split으로 쪼갬(공백이아니라 빈문자열로 쪼갰으므로 문자하나하나가 String형으로 들어감)

- for문을 돌려서 cnt변수에 공백이 나올때까지 +1을 함.

- 공백이 나오면 cnt를 0으로.

- cnt가 홀수냐 짝수냐에 따라 대문자 소문자 변환.


>> 깔끔한 프로그래밍인듯 하다. char로 쪼개는것보다 오히려 더 효율적인것 같다. 

>> 저는 char에서 String으로 변환하여 다시 char로 변환했는데 이부분을 생각하지 못한 것 같다.

>> s.split("") 이걸 생각했다면 충분히 접근할 수 있었던 풀이방법이다.



댓글

Designed by JB FACTORY