알고리즘 : 프로그래머스 : JAVA : 이상한 문자 만들기

2022. 1. 19. 23:02알고리즘/프로그래머스

반응형

<문제>


<코드 & 설명>

class Solution {
  public String solution(String s) {
    String answer = "";
    int idx = 0;
    
    String[] strArr = s.split("");
 
    for(int i=0; i<strArr.length; i++) {
      if((" ").equals(strArr[i])) idx = 0;
      else {  
        if(idx%2==0) {
          idx++;
          strArr[i] = strArr[i].toUpperCase(); 
        }else {
          idx++;
          strArr[i] = strArr[i].toLowerCase();
        }
      }
      answer += strArr[i];
    }
 
    return answer;
 
  }
}

#라인4
문자열 인덱스를 구분할 변수를 선언한다.

#라인6
입력받은 문자열을 split()을 활용해서 한 글자씩 String배열에 담는다.

#라인8, 9
for문을 통해 공백을 먼저 처리한다.
문자열 중에서 공백을 만나면 idx를 0으로 초기화 한다. 

그래야 각 단어마다 정확한 짝수, 홀수번째를 구분할 수 있다.

#라인11 ~ 13
만약 공백이 아니라면 이 단어가 짝수번째인지 홀수번째인지 계산한다.
짝수번째면 대문자로 변경하고(toUpperCase()) idx++를 한다.

#라인14 ~ 16
홀수번째면 소문자로 변경하고(toLowerCase()) idx++를 한다.

여기까지 한 글자를 처리하는 과정이다.

#라인19, 22
여기까지 한 글자 처리를 완료하면 answer 변수에 담는다.
이런식으로 문자열 s를 처리하면 answer를 리턴한다.


<다른 방법>

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] str = s.split("");
        
        int idx = 0; //인덱스
        for(int i=0; i<str.length; i++){
            if(str[i].equals(" ")){ //띄어쓰기 있다면
                idx = 0; //인덱스 0 초기화
            }
            else if(idx % 2 == 0){ //idx가 짝수면
                str[i] = str[i].toUpperCase(); //대문자로 변경
                idx++; //idx 증가
            }
            else if(idx % 2 != 0){ //idx가 홀수면
                str[i] = str[i].toLowerCase(); //소문자로 변경
                idx++; //idx 증가
            }
            answer += str[i]; 
        }
        return answer;
    }
}

1. s를 하나식 읽어오기 위해 String 배열에 s 를 넣어주었습니다.
2. 띄어쓰기마다 인덱스를 초기화해야하므로 idx 변수를 만들어주고 for문을 생성합니다.
3. String 형은 == 사용시 null 참조 오류가 발생할 수 있으므로 equals로 비교하고 공백을 찾습니다.
   공백이 있다면 idx는 0으로 초기화 합니다.
4. idx가 짝수이면 toUpperCase(); 함수로 대문자로 변경하고 idx가 홀수이면 toLowerCase(); 함수로 소문자로 변경합니다. 
   이후 idx를 증가시켜 띄어쓰기 이후 홀, 짝을 비교할 수 있도록 합니다.
5. for문 루프가 한번식 돌기 전마다 str[i]를 answer 에 적용합니다.
6. 이런식으로 계속 루프가 돌면 문제에서 원하는 문자가 answer에 저장되고 answer을 return 합니다.

반응형