문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
s | return |
---|---|
"try hello world" | "TrY HeLlO WoRlD" |
class Solution {
public String solution(String s) {
String answer = "";
int str = 0;
for(int i = 0; i < s.length(); i++) {
if(i % 2 == 0) {
str = s.charAt(i);
answer += (char)(str-32);
}else {
str = s.charAt(i);
if(str > 64 && str < 91) {
answer += (char)(str+32);
}else {
answer += s.charAt(i);
}
}
}
return answer.replaceAll("\u0000", " "); //programmers에서 코드 실행을 눌렀을 때
//공백에 \u0000이라는 코드가 적혀서 삭제 해 줌.
}
}
ASCII코드를 써서 풀면 간단하게 풀릴거라고 생각했고 코드 실행버튼을 클릭 했을때도 잘 넘어갔다.
근데... 제출 버튼을 클릭하니..
..🤷🏻♂️ 뭐지..? 다시 풀어 봐야겠다..
💡 아 문제에 문자열의 인덱스가 기준이 아니라 공백을 기준이라고 나와있다ㅋㅋㅋ...
import java.util.*;
class Solution {
public static String solution(String s) {
String answer = "";
int c = 0;
int cnt = 0;
for(int i = 0; i < s.length(); i++) {
c = s.charAt(i);
if(c == 32) {
answer += (char)c;
cnt = 0;
}else if(cnt % 2 == 0) {
if(c > 96 && c < 123) { //소문자 라면
answer += (char)(c - 32);
cnt++;
}else { // 대문자면 그냥 +
answer += s.charAt(i);
cnt++;
}
}else { // 홀수
if(c > 64 && c < 91) { // 대문자면
answer += (char)(c + 32); //소문자로 만들기
cnt++;
}else {
answer += s.charAt(i); // 대문자면 그냥 +
cnt++;
}
}
}
return answer;
}
}
이 문제의 요점은 짝수 홀수의 기준이 문자열의 인덱스가 아니라 공백이 기준인 것이다.
ASCII코드를 써서
1. if(c == 32)
공백이라면 공백 기준으로 인덱스를 초기화 한다. cnt = 0;
2. if(cnt % 2 == 0)
인덱스가 짝수일 때 소문자라면 대문자로 만들어 주고 cnt 를 증가 시킨다.
3. 반복한다.
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;
}
}
나도 처음에는 저런 방식으로 해 보려고 했었는데 잘 안되서 ASCII코드를 쓴건데... 저런 식으로 간단하게 할 수 있다니.. 약간 허무하지만.. 하나를 배웠다고 생각해야지..ㅠ