https://school.programmers.co.kr/learn/courses/30/lessons/12951#
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
s는 길이 1 이상 200 이하인 문자열입니다.
s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
숫자는 단어의 첫 문자로만 나옵니다.
숫자로만 이루어진 단어는 없습니다.
공백문자가 연속해서 나올 수 있습니다.
입출력 예
s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"
문제 해결을 위한 과정
처음 이 문제를 처음 접할 때 s.split(" ")을 이용해 단어 배열을 만들고 접근하였고 Fail판정을 받았습니다. 그 이유는 다음과 같습니다.
- 공백이 연속으로 나오는 경우: "3people unFollowed me"처럼 단어 사이에 공백이 여러 개일 때
- 문자열 마지막에 공백이 있는 경우: 자바의 기본 split은 문자열 맨 끝에 붙은 공백들을 무시하고 잘라버리기 때문에 원래 문자의 형태를 훼손합니다.
따라서 이 문제를 풀기 위해서는 문자열을 한 글자씩(charAt) 순회하면서 직접 처리해야 합니다.
문자열을 한 바퀴 돌면서 아스키코드(ASCII) 값을 기준으로 대소문자를 판별합니다.
- 맨 첫 글자 (i == 0): 무조건 대문자가 되어야 하는 자리입니다. 소문자 범위(97 ~ 122)라면 아스키값에서 32를 빼서 대문자로 변환하고, 그 외(숫자나 대문자)라면 그대로 둡니다.
- 그 외의 글자들 (i > 0):
- 내 앞 글자가 공백(" ")인 경우: 새로운 단어의 시작점입니다. 즉, 대문자가 되어야 합니다. 현재 글자가 소문자라면 대문자로 바꾸고(num - 32), 원래 대문자나 숫자였다면 건드리지 않고 그대로(num) 붙여줍니다.
- 내 앞 글자가 공백이 아닌 경우: 단어의 중간이나 끝에 끼어있는 글자들입니다. JadenCase 규칙상 첫 글자를 제외하곤 무조건 소문자여야 하므로, 대문자 범위(65 ~ 90)인 글자를 발견하면 32를 더해 소문자로 강제 변환합니다.
소스코드
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
for(int i = 0; i < s.length(); i++) {
int num = s.charAt(i) + 0;
if(i == 0) { // 처음
if(num >= 97 && num <= 122) {
answer += (char)(num - 32);
} else {
answer += (char)num;
}
} else { // 그 외
if((" ").equals(String.valueOf(s.charAt(i-1)))) {
if(num >= 97 && num <= 122)
answer += (char)(num - 32);
else
answer += (char)(num);
} else if(num >= 65 && num <= 90)
answer += (char)(num + 32);
else {
answer += (char)num;
}
}
}
return answer;
}
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 최솟값 만들기 (Level2 Java) (0) | 2026.05.26 |
|---|---|
| 프로그래머스 최대값과 최솟값 (Level2 Java) (0) | 2026.05.18 |
| 프로그래머스 단어 변환 (Level3 Java) (0) | 2026.05.16 |
| 프로그래머스 게임 맵 최단거리(Level3 Java) (1) | 2026.05.12 |
| 프로그래머스 네트워크 (Level3 Java) (0) | 2026.05.11 |