본문 바로가기
코딩 테스트/[JAVA] programmers 코딩 테스트 연습

[No.16] 이상한 문자 만들기/ 프로그래머스 코딩 테스트 연습 JAVA

by M개발자 2021. 6. 9.
반응형

Create Strange Characters


문제 설명

 

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

 

제한 사항

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

예시

 

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

코드 해석 및 전체 코드

 

알고리즘 1

1. StringBuilder로 반환 변수 선언

2. 홀/짝수 판단하기 위한 boolean 타입 변수 선언

3.  for문 : 0 ~ s.length() - 1까지 반복

4. 판단하기 위한 한 글자 char타입 변수로 초기화 charAt()

5. 공백일 시 answer에 공백 추가, even = true 설정, continue  apped()

6. even이 true시 짝수이므로 대문자로 변환  toUpperCase()

7. false시 홀수이므로 소문자로 변환  toLowerCase()

 

사용한 메서드

대문자 → 소문자
String toUpperCase()
소문자 → 대문자
String toLowerCase()

문자 추가
StringBuilder append()

String 타입으로 변환
String.valueOf()

 

ch는 char 타입이므로 String 타입의 toUpperCase()/toLowerCase() 메서드를 사용할 수 없다. 

그러므로 대문자로 변환할 때 valueOf() 메소드를 사용하여 char 타입의 ch를 String 타입으로 변환한다. 

 

class Solution {
    public String solution(String s) {
        StringBuilder answer = new StringBuilder("");
        boolean even = true;

        for(int i = 0; i < s.length(); i++){
            char ch = s.charAt(i);

            if(ch == ' ') {
                answer.append(" ");
                even = true;
                continue;                
            }

            if(even){
                answer.append(String.valueOf(ch).toUpperCase());
            }
            else {
                answer.append(String.valueOf(ch).toLowerCase());
            }

            even = !even;
        }
        return answer.toString();
    }
}

알고리즘 2

1. StringBuilder로 반환 변수 선언

2. 문자열 s를 문자를 배열에 저장한 char타입의 배열 선언  toCharArray()

3. 홀/짝수 판단하기 위한 boolean 타입 변수 선언

4.  for문 : 0 ~ s.length() - 1까지 반복

5. 공백일 시 answer에 공백 추가, even = true 설정, continue  apped()

6. even이 true시 짝수이므로 대문자로 변환  toUpperCase()

7. false시 홀수이므로 소문자로 변환  toLowerCase()

 

다른 사람이 구현한 코드를 참고하였는데, toCharArray() 메서드를 사용하고 싶어서 작성해보았다.! 

 

toCharArray()

문자열을 문자 순서로 변환 후 반환하는 메서드이다. 

 

String 타입의 toUpperCase을 char 타입으로 사용하려면.... 

Character.toUpperCase(ch[i])를 하면 된다. 속도도 더 빨라짐 ^^v

다른 사람의 코드를 확인할 수 있어서 좋은 것 같다. 배우고 가는 게 많음 ~!!! 

class Solution {
  public String solution(String s) {
      char[] ch = s.toCharArray();
      StringBuilder answer = new StringBuilder();
      boolean even = true;
      
      for(int i = 0; i < ch.length; i++){
          if(ch[i] == ' '){
            even = true;
            answer.append(" ");
            continue;
          } 
          
          if(even){
              answer.append(Character.toUpperCase(ch[i]));
          }
          else{
              answer.append(Character.toLowerCase(ch[i]));
          }
          
          even = !even;
      }
      
      return answer.toString();
  }
}

최종 속도 

toCharArray() + Character. 사용


github

programmers

 

반응형

댓글