1. 문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
2. 제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
3. 입출력 예
s | return |
"try hello world" | "TrY HeLlO WoRlD" |
4. 입출력 예 설명
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
class Solution {
public String solution(String s) {
String answer = "";
s= s.trim();
for(int i =0; i<s.length(); i++) {s = s.replaceAll(" ", " "); } //1
String[] a = s.split(" ");
char cnt;
for (int i = 0; i < a.length; i++) { //2
for (int y = 0; y < a[i].length(); y++) {
int t = a[i].charAt(y);
if (y % 2 == 0) {
if (96 < t&&t<123) {
t -= 32;
cnt = (char) t;
answer += cnt;
} else {
cnt = (char) t;
answer += cnt;
}
} else {
if (64<t&&t < 91) {
t += 32;
cnt = (char) t;
answer += cnt;
} else {
cnt = (char) t;
answer += cnt;
}
}
}
answer += " "; //3
}
answer = answer.trim();
return answer;
}
}
5. 풀이(오답)
//1
문자 s 내 2개 이상의 공백을 1개의 공백으로 치환 + 문자열 맨 앞, 뒤의 공백을 제거
앞 뒤의 공백이 없고 각 문자 사이에 한 개의 공백만 가지도록 한 s를 공백을 기준으로 배열 a에 저장
//2
아스키코드를 이용해 대문자 범위 : 64 < t < 91 / 소문자 범위 : 96 < t < 122를 기준으로 32만큼 더하고 빼서 answer에 추가
마지막에 공백 추가
//3
맨 마지막 문자 뒤에 존재하는 공백 제거
너무 아스키 코드를 이용하고자 불필요한 줄이 많았고,
무엇보다 테스트 케이스를 이클립스 내에서 여러 차례 해보았으나 최종적으로 통과하지 못하는 결과가 나왔다...
toUpperCase(), toLowerCase() 을 사용해서 다시 해보도록 하자...
6. 재풀이(오답)
class Solution {
public String solution(String s) {
String answer = "";
for (int i = 0; i < s.length(); i++) {
s = s.replace(" ", " ");
}
s = s.trim();
String[] a = s.split(" ");
for (int i = 0; i < a.length; i++) {
int cnt = 0;
for (int t = 0; t < a[i].length(); t++) {
if (t % 2 == 0) {
answer += a[i].substring(cnt, cnt + 1).toUpperCase();
cnt++;
} else {
answer += a[i].substring(cnt, cnt + 1).toLowerCase();
cnt++;
}
}
answer += " ";
}
answer = answer.trim();
return answer;
}
}
1번째 풀이에서 toUpperCase() 와 toLowerCase()를 사용하여 보다 간결한 코딩이 되었다.
하지만 여전히 테스트 케이스에서 통과가 안 되었고, 지문을 몇번이고 다시 읽어보니,,
글자 사이에 있는 공백이 하나 이상일 수 있고 이를 그대로 살려서 변환해야했었다,,
지문 해석도 제대로 안하고 풀이에 들어가니 시간을 엄청 써도 답이 안 나오는 건 당연한 결과이다..
7. 최종 풀이
class Solution {
public String solution(String s) {
String answer = "";
String[] a = s.split(" ",-1);
for (int i = 0; i < a.length; i++) {
int cnt = 0;
for (int t = 0; t < a[i].length(); t++) {
if (t % 2 == 0) {
answer += a[i].substring(cnt, cnt + 1).toUpperCase();
cnt++;
} else {
answer += a[i].substring(cnt, cnt + 1).toLowerCase();
cnt++;
}
}
answer += " ";
}
answer = answer.substring(0, answer.length()-1);
return answer;
}
}
초반에 공백을 지우는 과정을 없애고 마지막에 answer +=" ";로 추가된 공백만 하나 지워준다면
처음 s에서 공백을 포함한 문자열 그대로 변환된 answer을 도출할 수 있었다..
문제 해석을 꼼꼼히 해야겠다..!
[공부 출처]
https://jamesdreaming.tistory.com/87
https://jamesdreaming.tistory.com/84
'코딩테스트(Level 0~1)' 카테고리의 다른 글
[JAVA, Programmers] 예산(자바) (0) | 2022.11.24 |
---|---|
[JAVA, Programmers] [1차] 비밀번호(자바, kakao) (0) | 2022.11.24 |
[JAVA, Programmers] 옹알이(1)(자바) (0) | 2022.11.24 |
[JAVA, Programmers] 같은 숫자는 싫어(자바) (0) | 2022.11.23 |
[JAVA, Programmers] 신고 결과 받기(자바, kakao) (0) | 2022.11.22 |