개발인생/Altorithm

[알고리즘 기초 100제] 5. 대소문자 변환

forri 2025. 3. 9. 17:20

✔️문제

- 대문자는 소문자로, 소문자는 대문자로 변환하시오
- 입력: helloWorlD
- 정답: HELLOwORLd


📍정답

package _05_CapToLow;

public class Main_char {

  // 1.char배열 사용
  public static void main(String[] args) {

    String input = "helloWorlD";
    char[] arr = input.toCharArray();

    System.out.print(arr);
    System.out.println();

    for (int i = 0; i < arr.length; i++) {
      if (arr[i] >= 'a' && arr[i] <= 'z') { // 소문자->대문자
        arr[i] = (char) (arr[i] + 'A' - 'a'); // 'a' 'b' ~ 'z' 'A' 'B' 'C'
      } else if (arr[i] >= 'A' && arr[i] <= 'Z') {// 대문자->소문자
        arr[i] = (char) (arr[i] - ('A' - 'a'));
      }
    }

    System.out.print(arr);

  }
}

 

package _05_CapToLow;

public class Main_StringBuilder {

  // 2.StringBuilder 사용
  public static void main(String[] args) {

    String input = "helloWorlD";
    String result = convertCase(input);
    System.out.print(result);

  }

  private static String convertCase(String input) {

    StringBuilder sb = new StringBuilder();

    for (char c : input.toCharArray()) {
      // 대문자인 경우-> 소문자로 변환
      if (Character.isUpperCase(c)) {
        sb.append(Character.toLowerCase(c));
        // 소문자인 경우-> 대문자로 변환
      } else if (Character.isLowerCase(c)) {
        sb.append(Character.toUpperCase(c));
        // 알바벳이 아닌 경우 그대로 추가
      } else {
        sb.append(c);
      }
    }

    return sb.toString(); //메서드 종료

    // throw new UnsupportedOperationException("Unimplemented method
    // 'convertCase'");
  }

}

※ StringBuilder란?

더보기
  • Java에서 문자열을 다룰 때 사용되는 클래스로, String과 달리 가변(mutable) 객체임
  • 즉, StringBuilder를 사용하면 문자열을 변경할 때 새로운 객체를 생성하지 않고도 수정할 수 있어 성능이 향상됨!

String vs StringBuilder vs StringBuffer 비교

특징 String(불변) StringBuilder(가변) StringBuffer(가변, 동기화)
가변성 ❌ 불변 ✅ 가변 ✅ 가변
속도 느림 (새 객체 생성) 빠름 (단일 쓰레드) 느림 (동기화 처리)
멀티쓰레드 ❌ 불가능 ❌ 불가능 ✅ 가능 (Thread-safe)

- 일반적으로 StringBuilder가 가장 빠르고 효율적
- 멀티쓰레드 환경에서는 StringBuffer 사용 고려

 

StringBuilder 주요 메서드

메서드 설명 예제
append() 문자열 추가 sb.append(" World");
insert(index, 문자열) 특정 위치에 삽입 sb.insert(5, " Java");
replace(startIndex, endIndex, "변경할 문자열") 특정 부분 변경 sb.replace(6, 11, "Java");
delete(startIndex, endIndex) 문자열 일부 삭제 sb.delete(5, 11);
reverse() 문자열 뒤집기 sb.reverse();

 

endIndex 주의

  • replace(startIndex, endIndex, newString) 메서드는 startIndex부터 endIndex-1까지의 문자열을 새로운 문자열로 교체
  • 즉, endIndex는 포함되지 않고 그 앞 문자까지 변경됨!

 

실전 예제

public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");

        sb.append(" World");  
        System.out.println(sb);  // 출력: Hello World

        sb.replace(6, 11, "Java");  
        System.out.println(sb);  // 출력: Hello Java

        sb.insert(5, ",");  
        System.out.println(sb);  // 출력: Hello, Java

        sb.delete(5, 6);  
        System.out.println(sb);  // 출력: Hello Java

        sb.reverse();  
        System.out.println(sb);  // 출력: avaJ olleH
    }
}

 

toCharArray()
String 문자열을 char형 배열로 바꿔서 반환해주는 메서드

참고자료