문제
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백 문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
< 제한 사항 >
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
- 출력 예시 -
정답 코드
< 내 정답 코드 >
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
String[] a = s.split(" ", -1);
for (int i = 0; i < a.length; i++) {
String msg = a[i];
for (int j = 0; j < msg.length(); j++) {
if (j % 2 == 1) {
String b = Character.toString(msg.charAt(j));
answer += b.toLowerCase();
} else {
String b = Character.toString(msg.charAt(j));
answer += b.toUpperCase();
}
}
if (i == a.length - 1) {
break;
}
answer += " ";
}
return answer;
}
}
< 타인 답변 코드 1 >
// 문자열을 char[] 배열로 만들어서 한 글자씩 변환하기
// ( if 문 사용 버전 )
import java.util.*;
class Solution {
public String solution(String s) {
String[] strArr = s.split("");
String answer = "";
int idx = 0;
for (int i = 0; i < strArr.length; i++) {
if (strArr[i].equals(" ")) {
idx = 0;
} else if (idx % 2 == 0) {
strArr[i] = strArr[i].toUpperCase();
idx++;
} else {
strArr[i] = strArr[i].toLowerCase();
idx++;
}
answer += strArr[i];
}
return answer;
}
}
< 타인 답변 코드 2 >
// 문자열을 char[] 배열로 만들어서 한 글자씩 변환하기
// ( 삼항연산자 버전 )
import java.util.*;
class Solution {
public String solution(String s) {
String[] strArr = s.split("");
String answer = "";
int idx = 0;
for (String str : strArr) {
idx = str.contains(" ") ? 0 : idx + 1;
answer += idx % 2 == 0 ? str.toLowerCase() : str.toUpperCase();
}
return answer;
}
}
< 타인 답변 코드 3 >
// String 을 char 배열로 바꿔서 하나씩 변환하기
class Solution {
public String solution(String s) {
char[] chars = s.toCharArray();
int idx = 0;
for (int i = 0; i < chars.length; i++) {
if (chars[i] == ' ')
idx = 0;
else
chars[i] = (idx++ % 2 == 0 ? Character.toUpperCase(chars[i]) : Character.toLowerCase(chars[i]));
}
return String.valueOf(chars);
}
}
이것을 주의하자!
- 이 문제를 해결하는 방법은 크게 두 가지가 있다. 관건은 각 단어별로 시작 인데스를 어떻게 잡는가에 있다.
(1) 빈칸을 기준으로 '하나의 단어'를 String [ ] 배열에 넣고, 배열 원소마다 for 문을 또 돌려서
단어의 알파벳 인덱스를 확인하기.
: 중복 for 문으로 돌리기 때문에 for 문의 i 인덱스로 홀수, 짝수를 구분할 수 있다.
(2) 처음부터 '알파벳 하나씩' String [] 배열에 넣은 다음, 인덱스는 따로 관리하면서 대소문자 바꾸기.
: 각각의 알파벳을 한 번에 배열에 저장하기 때문에, 별도의 인덱스 변수를 만들어서 공백일 때는
0을, 아니면 인덱스 + 1을 하면서 홀수, 짝수를 구분한다.
- .split(" ") 메서드는 빈칸을 기준으로 String [ ] 배열을 만든다. 따라서 빈칸이 있을 때 배열의 원소를 넣는다. 하지만 .split("")은 String 객체를 이루는 모든 원소를 하나씩 String [ ] 배열로 만든다.
- 문자열.split( " " ) 은 문자열이 공백 문자로 끝나는 경우 이를 무시해 버린다. 마지막에 오는 빈 문자열도 포함시키려면 문자열.split( " " , - 1 ) 라고 해야 한다.
- .toCharArray() 메서드는 String 객체의 원소를 하나씩 char [] 배열로 만든다.
- String 객체가 '공백'을 포함하는지 확인하기 위해선 두 가지 메서드로 가능하다. contains( ) 메서드는 해당 값이 들어가 있는지 boolean 값으로 나타낸다. contains(" "); 이렇게 하면 해당 String 객체가 공백이 있는지 알 수 있다. 또 equals(" ") 으로 해당 String 이 공백인지 확인할 수 있다.
- String 의 메서드론 toUpperCase() 와 toLowerCase() 가 있다. 둘 다 String 객체를 대상으로 대소문자를 변경한다. 만약 char 형 이라면, Character.toUpperCase() 와 Character.toLowerCase() 을 사용해야 한다.
- 공백을 대소문자 변환 메서드로 사용해도 문제가 없다. 단순히 공백은 공백으로 나올 뿐이다. 오로지 알파벳만 반응해서 변환된다.
'코딩 테스트' 카테고리의 다른 글
[프로그래머스] (Lv.1) 시저 암호 ** (0) | 2022.08.31 |
---|---|
[프로그래머스] (Lv.1) 약수의 합 (0) | 2022.08.31 |
[프로그래머스] (Lv.1) 자릿수 더하기 (0) | 2022.08.31 |
[프로그래머스] (Lv.1) 자연수 뒤집어 배열로 만들기 (0) | 2022.08.31 |
[프로그래머스] (Lv.1) 정수 내림차순으로 배치하기 (0) | 2022.08.31 |