코딩테스트/알고리즘 문제

[프로그래머스] 12930 이상한 문자 만들기 - Java

glorypang 2025. 3. 27. 16:28
728x90
반응형
SMALL

📌 문제 정보

  • 출처: 문제 링크
  • 난이도: ⭐ 
  • 문제 유형: 문자열
  • 사용 언어: Java 

🔍 문제 설명

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

 

제한사항

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

💡 풀이 노트

if(c == ' ') i = -1;
  • 단어가 끝났다는 뜻이므로, 다음 글자부터는 인덱스를 0부터 다시 시작
  • 아래에서 `i++`이 바로 실행되니까, `i = -1`을 줘야 그 다음 문자가 0번째 문자로 처리!

 

if(i%2 == 0 ) sb.append(Character.toUpperCase(c));
else sb.append(Character.toLowerCase(c));
  • 짝수 번째(`0, 2, 4...`) → `Character.toUpperCase(c)`
  • 홀수 번째(`1, 3, 5...`) → `Character.toLowerCase(c)`

🚀 코드 (Java)

class Solution {
    public String solution(String s) {
        StringBuilder sb = new StringBuilder();
        int i = 0;
        
        for(char c : s.toCharArray()){
            if(c == ' ')
                i = -1;
            
            if(i%2 == 0 ) sb.append(Character.toUpperCase(c));
            else sb.append(Character.toLowerCase(c));
            i++;
        }
        return sb.toString();
    }
}

🖥 실행 결과

입력 & 출력
s			return
"try hello world"	"TrY HeLlO WoRlD"

 


🔄 추가 정리

1. StringBuilder를 사용하는 이유

문자열을 반복해서 더할 때는 `+` 연산보다 `StringBuilder`를 사용하는 것이 훨씬 효율적

String result = "";
for (...) {
    result += someChar; // ❌ String은 immutable → 매번 새 객체 생성됨
}

위 코드는 문자열이 바뀔 때마다 새로운 String 객체가 생성되기 때문에, 반복 횟수가 많으면 성능이 급격히 나빠짐

→ 개선하기

StringBuilder sb = new StringBuilder();
sb.append(someChar); // ✅ 내부 버퍼에 이어붙이기 → 성능 좋음

 

 

2. 자바의 대소문자 변환 관련 메서드

✅ CHAR

`Character.toUpperCase(char ch)`

  • 문자 하나(char)를 대문자로 변환
  • 예: `'a'` → `'A'`

`Character.toLowerCase(char ch)`

  • 문자 하나(char)를 소문자로 변환
  • 예: `'Z'` → `'z'`

✅ String

`String.toUpperCase()`

  • 문자열 전체를 대문자로 변환
  • 예: `"hello"` → `"HELLO"`

`String.toLowerCase()`

  • 문자열 전체를 소문자로 변환
  • 예: `"HeLLo"` → `"hello"`

 

대상  대문자 변환  소문자 변환
`char` `Character.toUpperCase(c)` `Character.toLowerCase(c)`
`String` `str.toUpperCase()` `str.toLowerCase()`

📌 깃허브 코드 저장소: https://github.com/glorypang/CodingTest

 

 

 

728x90
반응형
LIST