Algorithms/- 프로그래머스
프로그래머스 - 이상한 문자 만들기 [자바]
자굿
2022. 2. 2. 11:09
- 문제 링크 : 이상한 문자 만들기
코딩테스트 연습 - 이상한 문자 만들기
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을
programmers.co.kr
정답
class Solution {
public String solution(String s) {
String[] arr = s.split("");
int idx = 0;
for(int i=0; i<arr.length; i++){
if(" ".equals(arr[i])){
idx = 0;
continue;
}
if(idx % 2 == 0){
arr[i] = arr[i].toUpperCase();
idx++;
}else{
arr[i] = arr[i].toLowerCase();
idx++;
}
}
StringBuilder sb = new StringBuilder();
for(String str : arr){
sb.append(str);
}
return sb.toString();
}
}
분석
문제가 좀 잘 못 되었다.
단어별 대소문자 변환해서 리턴하라고만 설명이 되어있는데
공백이 하나 이상 들어가 있고 공백까지 모두 포함해서 동일하게 return해줘야한다.
그래서 split(" ")로 해결하려고 하면 절대 해결되지 않고
split("")으로 분리한 후 단어별 index를 지정하여 풀어야 한다.
참고할 만한 정답
class Solution {
public String solution(String s) {
String answer = "";
int cnt = 0;
String[] array = s.split("");
for(String ss : array) {
cnt = ss.contains(" ") ? 0 : cnt + 1;
answer += cnt%2 == 0 ? ss.toLowerCase() : ss.toUpperCase();
}
return answer;
}
}
비교 분석
- 위 정답을 보니까 굳이 기존 배열에 넣고 나중에 for문을 할 필요가 없어보인다.
비교 분석 반영
class Solution {
public String solution(String s) {
String[] arr = s.split("");
StringBuilder sb = new StringBuilder();
int idx = 0;
for(int i=0; i<arr.length; i++){
if(" ".equals(arr[i])){
idx = 0;
sb.append(arr[i]);
continue;
}
if(idx % 2 == 0){
sb.append(arr[i].toUpperCase());
idx++;
}else{
sb.append(arr[i].toLowerCase());
idx++;
}
}
return sb.toString();
}
}
반응형