Coding Test/Java Coding Test
[프로그래머스 / 자바] - 이상한 문자 만들기
by nam_ji
2024. 2. 19.
이상한 문자 만들기
문제
- 문자열 s가 매개변수로 주어집니다.
- s는 한 개 이상의 단어로 구성되어 있고,
- 각 단어는 하나 이상의 공백으로 구분되어 있고,
- 각 단어 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로
- 바꾼 문자열을 출력하는 문제입니다.
테스트 (인텔리제이)
- s를 문자별로 자르고
- for문을 돌려 각 문자의 위치를 idx로 구분하고 그 값이 홀수면 소문자를 짝수면 대문자를 빈칸이라면 idx값을 0이 들어가도록 했습니다.
- 다른 사람 풀이 중에서 더 좋은 코드가 있어 가져와 봤습니다.
- 위 과정을 모두 삼항연산자를 이용하여 푸는 방법과
- 문자열을 각 문자를 char 배열에 담아서 푸는 방법이 있습니다.
- 여기서 char 배열에 담아서 푸는 방법이 가장 빠르다고 나왔습니다.
public class Main {
public static void main(String[] args) {
/*
문자열 s가 매개변수로 주어집니다.
s는 한 개 이상의 단어로 구성되어 있고,
각 단어는 하나 이상의 공백으로 구분되어 있고,
각 단어 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로
바꾼 문자열을 출력하는 문제입니다.
"try hello world" > "TrY HeLlO WoRlD"
*/
String s = "try hello world";
// String[] ss = s.split("");
// String answer = "";
char[] c = s.toCharArray();
int idx = 0;
for (int i = 0; i < c.length; i++) {
if (c[i] == ' ') {
idx = 0;
} else {
c[i] = (idx++ % 2 == 0 ? Character.toUpperCase(c[i]) : Character.toLowerCase(c[i]));
}
}
System.out.println(String.valueOf(c));
// for (String str : ss) {
// idx = str.contains(" ") ? 0 : idx + 1;
// answer += idx % 2 == 0 ? str.toLowerCase() : str.toUpperCase();
// }
// System.out.println(answer);
// for (int i = 0; i < ss.length; i++) {
// if (ss[i].equals(" ")) {
// idx = 0;
// } else if (idx % 2 == 0) {
// ss[i] = ss[i].toUpperCase();
// idx++;
// } else if (idx % 2 != 0) {
// ss[i] = ss[i].toLowerCase();
// idx++;
// }
// answer += ss[i];
// }
// System.out.println(answer);
}
}
프로그래머스 코드
class Solution {
public String solution(String s) {
String answer = "";
String[] ss = s.split("");
int idx = 0;
for (int i = 0; i < ss.length; i++) {
if (ss[i].equals(" ")) {
idx = 0;
} else if (idx % 2 == 0) {
ss[i] = ss[i].toUpperCase();
idx++;
} else if (idx % 2 != 0) {
ss[i] = ss[i].toLowerCase();
idx++;
}
answer += ss[i];
}
return answer;
}
}