◇ 문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
◇ 제한 조건
- s는 길이 1 이상인 문자열입니다.
- s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
- 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )
◇ 입출력 예시
| s | return |
| "3people unFollowed me" | "3people Unfollowed Me" |
| "for the last week" | "For The Last Week" |
◇ 초기 내용
※ [출처] 프로그래머스-코딩테스트 연습-문제명
※ 초기 내용을 참고하여 문제에 맞는 코드를 작성하세요.
class Solution {
public String solution(String s) {
String answer = "";
return answer;
}
}
◇ 풀이 과정
문제의 풀이과정은 이러했다.
- s문자열의 내용을 answer로 복사한다.
- answer의 영어를 모두 소문자로 변환한다.(이후 코드의 편의를 위해)
- 띄워쓰기가 된 부분을 확인할 변수 check를 선언한다.
- 반복문을 돌리며 띄워쓰기가 된 부분을 찾은 후 check를 -1로 바꾸어준다.
- 띄워쓰기 다음의 단어(check == 0)를 찾으면 그 문자에 32를 빼어, 소문자를 대문자로 변환시킨다.
(대문자 아스키 코드 + 32 = 소문자 아스키 코드) - 문자가 반복될때마다 check를 1씩 증가한다.(띄워쓰기 확인을 위해)
◇ 참고사항
첫번째, Java에서 String 문자열 각 요소에 접근하는 방법은 str.charAt(인덱스번호)이다.
두번째, toUpperCase와 toLowerCase메소드를 이용하여 영문자를 각각 대문자, 소문자로 변환시킬 수 있지만 영문자가 아닌 문자가 포함될 시 변환되지 않는다.
<사용방법> str.toUpperCase() / str.toLowerCase()
세번째, isUpperCase와 isLowerCase메소드를 사용하여 현재 문자가 대문자인지 소문자인지 boolean형을 통해 알아볼 수 있다. isUpperCase에서는 소문자, 숫자, 한글 모두 false로 인식하며 isLowerCase도 이와 같다.
<사용방법> Character.isUpperCase(str) / Character.isLowerCase(str)
네번째, char형 배열을 String형으로 만드는 방법 중 하나는 char배열을 String 변수 생성자의 인수로 작성하는 것이다.
<사용방법> String str = new String(cArray);
◇ 답안
더보기
더보기
더보기
더보기
class Solution {
public String solution(String s) {
String answer;
//문자열 s를 char배열로 받을 temp배열 s.length만큼 선언
char temp[] = new char[s.length()];
for(int i = 0; i<s.length(); i++){
//s의 각 문자를 temp배열에 저장
//대문자라면 소문자로 바꿔서 temp 배열에 저장
if(s.charAt(i)>='A'&&s.charAt(i)<='Z'){
temp[i] = (char)(s.charAt(i)+32);
}else{
temp[i] = s.charAt(i);
}
//temp배열 속 문자 확인
//System.out.println(temp[i]);
}
//띄워쓰기를 체크하는 변수 선언
int check = 0;
for(int i = 0; i<temp.length; i++){
//띄워쓰기시, check는 -1
if(temp[i]==' '){
check = -1;
}
//띄워쓰기된 바로 뒤 글자는 단어의 첫문자
if(check==0){
//단어의 첫 문자가 조건에 맞게 잘 들어왔는지 확인
//System.out.println(temp.charAt(i));
//temp배열에 담을 때 모두 소문자로 변환했으므로 소문자만 조건체크
//단어의 첫번째 문자가 영문일때
if(temp[i]>='a'&&temp[i]<='z'){
//소문자를 대문자로 변환(소문자아스키코드 - 32 = 대문자아스키코드)
temp[i]-=32;
//잘 변환되었는지 확인
//System.out.println(temp[i]);
}
}
//한 글자마다 check + 1
check++;
}
//answer의 생성자를 이용하여 temp를 String으로 변환
answer = new String(temp);
return answer;
}
}
◇ 실행결과

◇ 출처
https://programmers.co.kr/learn/challenges
코딩테스트 연습
기초부터 차근차근, 직접 코드를 작성해 보세요.
programmers.co.kr
'코딩테스트 > Java' 카테고리의 다른 글
| [Level2] 행렬의 곱셈 답안 및 풀이 (0) | 2021.12.23 |
|---|---|
| [Level2] 피보나치 수 답안 및 풀이 (0) | 2021.12.22 |
| [Level2] N개의 최소 공배수 답안 및 풀이 (0) | 2021.12.20 |
| [Level1] 비밀지도 답안 및 풀이 (0) | 2021.07.19 |
| [Level1] 체육복 답안 및 풀이 (0) | 2021.07.18 |
댓글