[프로그래머스] 대소문자 바꿔서 출력하기 - Java

윤하빈·2026년 3월 11일

알고리즘

목록 보기
5/15
post-thumbnail

문제 설명

해결 전략

  • 반복문 사용
    • 문자열의 각 문자에 접근하기 위하여 for문을 활용
  • 조건문 사용
    • Character 클래스의 메서드를 사용하여 대소문자 판별
  • 변환 및 결합
    • 조건문 판별 결과에 따라 반대 케이스(대 → 소, 소 → 대)로 변환 후 새로운 문자열에 추가

코드 구현

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        char b;
        String answer = "";
        
        for (int i=0; i < a.length(); i++) {
            b = a.charAt(i);   
            // 1. 대문자인지 확인
            if (Character.isUpperCase(b)) {
            // 2. 대문자면 소문자로 변환 후 추가
                answer += Character.toLowerCase(b);
            } else {
            // 3. 소문자면 대문자로 변환 후 추가
                answer += Character.toUpperCase(b);
            }
        }

        System.out.println(answer);
    }
}

코드 해석

charAt(i)

  • 문자열의 특정 인덱스에 있는 문자를 가져오는 메서드

Character.isUpperCase(char)

  • 문자가 대문자인지 확인하는 boolean 메서드

Character.toLowerCase / Character.toUpperCase

  • 실제 변환을 담당하는 메서드

회고

  • 코드에는 answer += 방식을 사용했지만, 추후 다른 문제들에서 문자열이 매우 길어질 경우 성능을 위해 StringBuilder를 사용하는 것이 더 효율적일 것 같다
  • 아스키 코드 값 차이를 사용하는 방법으로도 구현해 볼 것

기존 구현 방식과 비교

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        
        // 가변적인 문자열을 효율적으로 다루기 위한 StringBuilder 사용
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < a.length(); i++) {
            char b = a.charAt(i);
            
            if (Character.isUpperCase(b)) {
                sb.append(Character.toLowerCase(b));
            } else {
                sb.append(Character.toUpperCase(b));
            }
        }

        // 결과 출력
        System.out.println(sb.toString());
    }
}
특징StringStringBuilder
가변성불변 (Immutable)가변 (Mutable)
수정 방식새로운 객체 생성기존 버퍼에서 수정
성능문자열 결합이 많을 때 느림문자열 결합이 많을 때 매우 빠름
권장 상황짧은 문자열, 변경이 없는 경우반복문 내 문자열 결합, 긴 문자열 조작

따라서

  • 자바에서 + 연산자를 통한 문자열 결합은 내부적으로 StringBuilder를 생성하여 처리되기도 하지만, 반복문 내부에는 매 루프마다 StringBuilder 객체가 새로 생성되는 비효율이 발생함
  • 그렇기 때문에 반복문 안에서 문자열을 합칠 때는 직접 StringBuilder를 선언해서 사용하는 것이 효율적임

1개의 댓글

comment-user-thumbnail
2026년 3월 13일

대소문자 캡스락 누르면 되지 않나요 ~~?

답글 달기