문제 주소
https://school.programmers.co.kr/learn/courses/30/lessons/12951
문제 설명
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" |
※ 공지 - 2022년 1월 14일 제한 조건과 테스트 케이스가 추가되었습니다.
⭐how to know if a character is lowercase
Character.isLowerCase('c');
⭐how to convert lowercase to uppercase
Character.toUpperCase(f);
⚠️주의할 점은 저거 하고 다시 넣어줘야 한다는거다 substring같이
char c = s.charAt(0);
Character.toUpperCase(c); -> 바뀐게 c에 저장이 안 됨
c = Character.toUpperCase(c); -> 넣어줘야 함!
테스트 1
입력값 〉 "3people unFollowed me"
기댓값 〉 "3people Unfollowed Me"
실행 결과 〉 실행한 결괏값 "3people UnFollowed Me"이 기댓값 "3people Unfollowed Me"과 다릅니다.
테스트 2
입력값 〉 "for the last week"
기댓값 〉 "For The Last Week"
실행 결과 〉 테스트를 통과하였습니다.
테스트 1 어이없다
아무튼 matches로 걸러내봄
class Solution {
public String solution(String str) {
String answer = "";
String [] array = str.split(" ");
for(String s : array){
char c = s.charAt(0);
if(!Character.toString(c).matches("[0-9]")){
if(Character.isLowerCase(c)){
c = Character.toUpperCase(c);
}
}
answer = answer + c + s.substring(1,s.length())+ " ";
}
answer = answer.substring(0,answer.length()-1);
return answer;
}
}
테스트 1
입력값 〉 "3people unFollowed me"
기댓값 〉 "3people Unfollowed Me"
실행 결과 〉 실행한 결괏값 "3people UnFollowed Me"이 기댓값 "3people Unfollowed Me"과 다릅니다.
테스트 2
입력값 〉 "for the last week"
기댓값 〉 "For The Last Week"
실행 결과 〉 테스트를 통과하였습니다.
? 3이 문제가 아닌가봄 뭐가 다른건지 모르겠음…
실행한 결괏값 "3people UnFollowed Me"이
기댓값 "3people Unfollowed Me"과 다릅니다.
아 followed가 뜬금없이 왜 대문자가 됐죠
음.. 모르겠어서 하나하나 읽어서 공백 다음글자만 하기로 함
class Solution {
public String solution(String s) {
String answer = "";
boolean wasBlank = true;
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
if(wasBlank){
if(Character.isLowerCase(c)){
c = Character.toUpperCase(c);
}
wasBlank = false;
}
if(c == ' '){
wasBlank = true;
}
answer = answer + c;
}
return answer;
}
}
테스트 1
입력값 〉 "3people unFollowed me"
기댓값 〉 "3people Unfollowed Me"
실행 결과 〉 실행한 결괏값 "3people UnFollowed Me"이 기댓값 "3people Unfollowed Me"과 다릅니다.
아 다시보니 입력값이 이미 대문자다
소문자로 바꿔줘야하나봄
class Solution {
public String solution(String s) {
String answer = "";
boolean wasBlank = true;
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
if(wasBlank){
if(Character.isLowerCase(c)){
c = Character.toUpperCase(c);
}
wasBlank = false;
}else{
if(c == ' '){
wasBlank = true;
}
else if(Character.isUpperCase(c)){
c = Character.toLowerCase(c);
}
}
answer = answer + c;
}
return answer;
}
}
테스트 1
입력값 〉 "3people unFollowed me"
기댓값 〉 "3people Unfollowed Me"
실행 결과 〉 테스트를 통과하였습니다.
테스트 2
입력값 〉 "for the last week"
기댓값 〉 "For The Last Week"
실행 결과 〉 테스트를 통과하였습니다.
테스트 1 〉 통과 (10.95ms, 87.9MB)
테스트 2 〉 실패 (10.70ms, 78.5MB)
테스트 3 〉 통과 (12.50ms, 75.6MB)
테스트 4 〉 실패 (9.12ms, 76.3MB)
테스트 5 〉 통과 (14.03ms, 82.9MB)
테스트 6 〉 통과 (13.14ms, 74.7MB)
테스트 7 〉 통과 (11.06ms, 75.6MB)
테스트 8 〉 통과 (8.83ms, 80.9MB)
테스트 9 〉 통과 (10.62ms, 83.5MB)
테스트 10 〉 통과 (14.81ms, 80MB)
테스트 11 〉 실패 (9.89ms, 64.7MB)
테스트 12 〉 실패 (9.49ms, 77.1MB)
테스트 13 〉 실패 (10.01ms, 87MB)
테스트 14 〉 실패 (10.34ms, 80.4MB)
테스트 15 〉 통과 (11.92ms, 78.1MB)
테스트 16 〉 통과 (10.74ms, 74.3MB)
테스트 17 〉 통과 (11.30ms, 74.8MB)
테스트 18 〉 통과 (9.39ms, 68.8MB)
왜죠
공백이 계속 나오거나 하면 이상해지나 싶고 이중 if문 더러운거 같아서 코드 정리했더니 통과됨
제출 코드
class Solution {
public String solution(String s) {
String answer = "";
boolean isFirst = true;
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
if(c == ' '){
isFirst = true;
}else if(isFirst){
if(Character.isLowerCase(c)){
c = Character.toUpperCase(c);
}
isFirst = false;
}else if(Character.isUpperCase(c)){
c = Character.toLowerCase(c);
}
answer = answer + c;
}
return answer;
}
}
테스트 1 〉 통과 (39.02ms, 86MB)
테스트 2 〉 통과 (9.86ms, 75.5MB)
테스트 3 〉 통과 (13.26ms, 69.7MB)
테스트 4 〉 통과 (13.75ms, 75.7MB)
테스트 5 〉 통과 (10.91ms, 75.9MB)
테스트 6 〉 통과 (11.98ms, 76.1MB)
테스트 7 〉 통과 (13.43ms, 85.6MB)
테스트 8 〉 통과 (11.80ms, 85.5MB)
테스트 9 〉 통과 (9.85ms, 79.5MB)
테스트 10 〉 통과 (13.88ms, 76.6MB)
테스트 11 〉 통과 (13.94ms, 76.3MB)
테스트 12 〉 통과 (9.96ms, 79MB)
테스트 13 〉 통과 (11.46ms, 79MB)
테스트 14 〉 통과 (12.47ms, 77.3MB)
테스트 15 〉 통과 (12.06ms, 76.5MB)
테스트 16 〉 통과 (9.40ms, 72.1MB)
테스트 17 〉 통과 (9.23ms, 73.4MB)
테스트 18 〉 통과 (12.35ms, 76.8MB)
'Coding Test' 카테고리의 다른 글
[프로그래머스] 카펫 (1) | 2024.01.08 |
---|---|
[프로그래머스]피보나치 수 (1) | 2024.01.08 |
[프로그래머스] 최댓값과 최솟값 (0) | 2024.01.08 |
[프로그래머스]개인정보 수집 유효기간 (0) | 2023.12.18 |
[프로그래머스]성격 유형 검사하기 (1) | 2023.12.16 |