코딩테스트 Jaden Case 제이든 케이스 풀이 (프로그래머스) Java
코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.
문제 정보
- 프로그래머스
- Java
- level 2
- 점수 : 12
- 문제 링크
문제
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” |
풀이 코드
나의 풀이 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public String solution(String s) {
String answer = "";
String[] sArray = s.split("");
int nextIsUpperFlag = 1;
for (int i = 0; i < sArray.length; i++) {
if (sArray[i].equals(" ")) {
// 공백이면 flag를 1로 변환하고 pass 한다.
nextIsUpperFlag = 1;
answer += sArray[i];
} else if (nextIsUpperFlag == 1) {
// 공백이 아니고 flag가 1이면 문자를 uppercase로 변환하고 flag를 0으로
nextIsUpperFlag = 0;
answer += sArray[i].toUpperCase();
} else {
// 공백이 아니고 flag가 0이면 lowercase로 변환한다.
answer += sArray[i].toLowerCase();
}
}
return answer;
}
다른 풀이 코드
풀이 코드 중, 풀이 방식은 비슷하나 삼항연산자를 이용해 짧게 작성한 코드가 있어 첨부한다.
1
2
3
4
5
6
7
8
9
10
11
12
public String solution(String s) {
String answer = "";
String[] sp = s.toLowerCase().split("");
boolean flag = true;
for (String ss : sp) {
answer += flag ? ss.toUpperCase() : ss;
flag = ss.equals(" ") ? true : false;
}
return answer;
}
풀이 방식
flag 이용
코드 참조
문자 다루기
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
// 문자를 나누기 : split()
String testString = "Hello World!";
System.out.println(Arrays.toString(testString));
>> [H, e, l, l, o, , W, o, r, l, d, !]
// 영문자를 대문자로 변경 : toUpperCase()
// -- 공백, 숫자, 한글 등에도 사용 가능하나 변화는 없다.
String testString = "Hello World!";
System.out.println(testString.toUpperCase());
>> "HELLO WORLD!"
// 영문자를 소문자로 변경 : toLowerCase()
// -- 공백, 숫자, 한글 등에도 사용 가능하나 변화는 없다.
String testString = "Hello World!";
System.out.println(testString.toLowerCase());
>> "hello world!"
// 문자가 같은지 비교 : equals()
System.out.println("abc".equals("abc"));
>> True
// 문자열 양 끝의 공백 제거 : strip()
System.out.println(" Hello World! ".strip());
>> "Hello World!"
// 배열 문자화 : Arrays.toString()
String testString = "Hello World!";
System.out.println(Arrays.toString(testString));
>> [H, e, l, l, o, , W, o, r, l, d, !]
리뷰
처음엔 문장을 공백 기준으로 나눈 뒤 나눠진 각 단어들을 대문자처리 후 공백을 사이사이에 끼워 붙여줬다. 그리고 마무리는 strip()으로 양 끝의 공백을 제거해줬다. 그런데 이게 문제였다.
테스트케이스 8번의 경우 문자열 앞 뒤로 공백이 있는데, 이 공백은 보존해줘야 하기 때문에 strip()을 사용하면 오답이 되어버린다. 때문에 문제 해결 방식을 바꾸어 각 문자를 검사하는 방식으로 바꾸었다.
Reference
대문자 소문자 전환 : https://pridiot.tistory.com/24
문자열 자르기 split : https://jamesdreaming.tistory.com/84
배열 길이 : https://mine-it-record.tistory.com/126
문자열 공백 제거 : https://hianna.tistory.com/526
특정 문자 포함 여부 : https://hianna.tistory.com/539
배열 값 출력하기 : https://hianna.tistory.com/510
댓글 남기기