Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래밍 언어
- 코딩테스트준비
- 코드트리
- 코딩테스트
- 개발자취업
- 1일1코테
- 자바
- 웹
- 연결 리스트
- 코딩테스트사이트추천
- 플로이드-워셜
- 알고리즘
- 오블완
- 개발자루틴
- 자바스크립트
- 프로그래머스
- 항해99
- 갭체크
- C
- 99클럽
- 인접 행렬
- Java
- 티스토리챌린지
- 파이썬
- #코드트리 #코딩테스트 #코테공부 #백트래킹 #알고리즘 기초
- 데이터베이스
- 코테공부
- 운영체제
- til
- 자료구조
Archives
- Today
- Total
와드의 블로그
JadenCase 문자열 만들기 본문
문제
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수를 완성하는 문제입니다.
- 입력: 알파벳, 숫자, 공백으로 이루어진 문자열 s (길이 1 이상 200 이하)
- 출력: JadenCase로 변환된 문자열
- 주의사항: 숫자는 단어의 첫 문자로만 나옵니다. 숫자로만 이루어진 단어는 없습니다. 공백문자가 연속해서 나올 수 있습니다.
링크: https://school.programmers.co.kr/learn/courses/30/lessons/12951
풀이 1: 플래그(Flag) 변수 활용
"다음 문자가 단어의 첫 글자인가?"를 기억하는 논리형(boolean) 플래그 변수를 두어 단어의 첫 글자를 판단합니다.
- 초기화: isFirst 플래그를 true로 설정하여 맨 처음 등장하는 문자는 무조건 첫 글자로 취급합니다. 모든 문자열을 소문자로 변환(s.toLowerCase())한 뒤 문자 배열로 쪼개어 순회합니다.
- 대소문자 판별 및 추가: isFirst가 참이라면 대문자로 변환(Character.toUpperCase(c))하여 추가하고, 거짓이라면 이미 소문자로 변환되어 있는 문자 c를 그대로 추가합니다.
- 상태 갱신: 방금 처리한 문자 c가 공백(' ')이었다면, 이어지는 다음 문자는 무조건 새로운 단어의 첫 글자가 되므로 isFirst를 true로 만듭니다. 공백이 아니었다면 단어가 계속 이어지는 중이므로 false로 만듭니다.
코드 1
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
boolean isFirst = true; // 현재 문자가 단어의 첫 글자인지 판별
// 1. 전체를 소문자로 변환 후 한 글자씩 순회
for (char c : s.toLowerCase().toCharArray()) {
// 2. 첫 글자면 대문자로 변환, 아니면 그대로 덧붙임
sb.append(isFirst ? Character.toUpperCase(c) : c);
// 3. 현재 문자가 공백이라면 다음 문자는 무조건 첫 글자가 됨
isFirst = (c == ' ');
}
return sb.toString();
}
}
풀이 2: 이전 인덱스를 직접 탐색하는 방식
문자열의 인덱스를 직접 제어하며 앞 문자의 상태를 확인하는 시뮬레이션 방식입니다.
- 단어의 시작점 판별: 현재 인덱스 i가 0이거나, 바로 앞 글자(s.charAt(i - 1))가 공백인 경우를 단어의 시작점으로 간주합니다.
- 대문자 변환 (ASCII 연산): 단어의 시작점이면서 알파벳 소문자(c >= 'a' && c <= 'z')라면, 자바의 내장 함수에 의존하지 않고 아스키코드 연산(c - 'a' + 'A')을 통해 직접 대문자로 변환합니다.
- 그 외의 경우: 시작점이 아닌 문자나 연속된 공백 등은 이미 처음에 toLowerCase()로 치환해둔 원본 소문자 상태 그대로 이어 붙입니다.
코드 2
class Solution {
public String solution(String s) {
s = s.toLowerCase();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
// 단어의 시작점(첫 글자이거나, 앞 글자가 공백)인지 판별
if (i == 0 || s.charAt(i - 1) == ' ') {
char c = s.charAt(i);
// 소문자 알파벳이라면 대문자로 변환
if (c >= 'a' && c <= 'z') {
sb.append((char)(c - 'a' + 'A'));
} else {
sb.append(c);
}
}
// 단어의 시작점이 아니라면 그대로 추가
else {
sb.append(s.charAt(i));
}
}
return sb.toString();
}
}
알고리즘 분류
문자열 (String), 파싱 (Parsing)
'PS > 프로그래머스' 카테고리의 다른 글
| 숫자의 표현 (2) | 2026.04.23 |
|---|---|
| 이진 변환 반복하기 (0) | 2026.04.23 |
| 연속된 부분 수열의 합 (0) | 2026.04.21 |
| 2개 이하로 다른 비트 (1) | 2026.04.20 |
| 튜플 (0) | 2026.04.19 |