https://school.programmers.co.kr/learn/courses/30/lessons/12951#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
class Solution {
public String solution(String s) {
// boolean isNew = true;
// StringBuilder sb = new StringBuilder();
// for(int i=0; i<s.length(); i++){
// sb.append(s.charAt(i));
// }
// for(int i=0; i<sb.length(); i++){
// if(!isNew&&sb.charAt(i)==' '){
// isNew=true;
// }
// if(isNew&&sb.charAt(i)==' '){
// continue;
// }
// if(isNew&&sb.charAt(i)>='0'&&sb.charAt(i)<='9'){
// isNew=false;
// continue;
// }
// if(isNew&&sb.charAt(i)>='a'&&sb.charAt(i)<='z'){
// sb.setCharAt(i,(char)((int)sb.charAt(i)-(int)' '));
// isNew=false;
// continue;
// }
// if(!isNew&&sb.charAt(i)>='A'&&sb.charAt(i)<='Z'){
// sb.setCharAt(i,(char)((int)sb.charAt(i)+(int)' '));
// }
// }
// return sb.toString();
String answer = "";
String[] arr = s.split(" ");
for(String item : arr){
if(item==" ") {
answer +=" ";
continue;
}
for(int i=0; i<item.length(); i++){
if(item.charAt(i)>='0'&&item.charAt(i)<='9'){
continue;
}
answer += item.substring(0,1).toUpperCase();
answer += item.substring(1,item.length()).toLowerCase();
answer += " ";
}
}
return answer;
}
}
위쪽 주석처리된 부분이 첫 풀이이고, 아래쪽이 다른 풀이를 살짝 보고 다시 풀어본 것이다.
둘다 실패했는데... 다시 풀어봐야겠다.
그런데 String 의 split() 이 동작이 잘 이해가 안간다.
String s = " abcd ef";
String[] arr = s.split(" ");
for(String item:arr){
System.out.println(item.length());
}
코드 실행 결과가 0 0 4 0 2 가 나오는데, 앞쪽 공백도 두칸이고 뒤쪽 공백도 두칸인데 왜 앞쪽만 0이 2개이고 뒤쪽은 0이 한개만 출력되는 지 모르겠다.
다시 풀기 23.03.10
약 40분정도 소요되서 스스로 풀어냈다.
시간이 오래 걸린 이유는, 문제의 조건을 정확히 확인하지 않았기 때문이다.
공백이 연속으로 나올 수 있다는 것을 인지하지 못해서 첫 풀이는 실패했고 두번째 풀이에서 성공했다.
코드
최초 풀이부터 4번째 풀이까지 기록을 남겨두려고 주석처리가 매우 지저분하지만 양해부탁드립니다.
class Solution {
public String solution(String s) {
/*1번 풀이*/
// boolean isNew = true;
// StringBuilder sb = new StringBuilder();
// for(int i=0; i<s.length(); i++){
// sb.append(s.charAt(i));
// }
// for(int i=0; i<sb.length(); i++){
// if(!isNew&&sb.charAt(i)==' '){
// isNew=true;
// }
// if(isNew&&sb.charAt(i)==' '){
// continue;
// }
// if(isNew&&sb.charAt(i)>='0'&&sb.charAt(i)<='9'){
// isNew=false;
// continue;
// }
// if(isNew&&sb.charAt(i)>='a'&&sb.charAt(i)<='z'){
// sb.setCharAt(i,(char)((int)sb.charAt(i)-(int)' '));
// isNew=false;
// continue;
// }
// if(!isNew&&sb.charAt(i)>='A'&&sb.charAt(i)<='Z'){
// sb.setCharAt(i,(char)((int)sb.charAt(i)+(int)' '));
// }
// }
// return sb.toString();
/*2번 풀이*/
// String answer = "";
// String[] arr = s.split(" ");
// for(String item : arr){
// if(item==" ") {
// answer +=" ";
// continue;
// }
// for(int i=0; i<item.length(); i++){
// if(item.charAt(i)>='0'&&item.charAt(i)<='9'){
// continue;
// }
// answer += item.substring(0,1).toUpperCase();
// answer += item.substring(1,item.length()).toLowerCase();
// answer += " ";
// }
// }
// return answer;
/*3번 풀이 -> 테스트케이스는 통과함*/
/*공백이 연속해서 나올 수 있음을 인지 못함*/
// StringBuilder tmpsb = new StringBuilder();
// String[] arr = s.split(" ");
// for(String item : arr){
// StringBuilder sb = new StringBuilder(item.toLowerCase());
// if(sb.charAt(0)>='a' && sb.charAt(0)<='z'){
// sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
// }
// tmpsb.append(sb);
// tmpsb.append(" ");
// }
// tmpsb.deleteCharAt(tmpsb.length()-1);
// return tmpsb.toString();
StringBuilder sb = new StringBuilder(s);
Boolean isNew = true;
for(int i=0; i<s.length(); i++){
if(sb.charAt(i)==' '){
isNew = true;
continue;
}
if(isNew){
if(sb.charAt(i)>='a' && sb.charAt(i)<='z'){
sb.setCharAt(i, Character.toUpperCase(sb.charAt(i)));
}
isNew=false;
}
else{
if(sb.charAt(i)>='A' && sb.charAt(i)<='Z'){
sb.setCharAt(i, Character.toLowerCase(sb.charAt(i)));
}
}
}
return sb.toString();
}
}
'알고리즘 > 문제' 카테고리의 다른 글
| [프로그래머스] Lv2 올바른 괄호 / JAVA (0) | 2023.02.21 |
|---|---|
| [프로그래머스] Lv2 최솟값 만들기 / JAVA (0) | 2023.02.20 |
| [프로그래머스] Lv2 최댓값과 최솟값 / JAVA (0) | 2023.02.18 |
| <다시풀기성공>[프로그래머스] lv2 귤고르기 / JAVA (0) | 2023.02.17 |
| [Programmers] 연속 부분 수열 합의 개수 / JAVA -> 실패 (0) | 2023.02.09 |
