✔ 난이도 - Bronze 1


input[1]로 받은 string을 toCharArray()를 사용하여 char[]로 변경 후 for-each문을 돌며 ArrayList에 add해줌.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String[] input = br.readLine().split(" ");
int number = Integer.parseInt(input[0]);
List<Character> strList = new ArrayList<>();
List<Character> strList2 = new ArrayList<>();
for (char c : input[1].toCharArray()){
strList.add(c);
strList2.add(c);
}
String[] answer = new String[3];
if (number == 1) {
answer[0] = input[1];
for(int i = 0; i < strList.size(); i++){
if (Character.isUpperCase(strList.get(i))){
strList.add(i, '_');
strList.set(i + 1, Character.toLowerCase(strList.get(i+1)));
i++;
}
}
answer[1] = listToString(strList);
answer[2] = CapitalizeFirstWord(answer[0]);
}else if (number == 2) {
answer[1] = input[1];
for(int i = 0; i < strList.size(); i++){
if (strList.get(i) == '_'){
for (int j = i; j < strList.size() - 1; j++){
strList.set(j, strList.get(j + 1));
}
strList.remove(strList.size() - 1);
strList.set(i, Character.toUpperCase(strList.get(i)));
}
}
answer[0] = listToString(strList);
answer[2] = CapitalizeFirstWord(answer[0]);
}else {
answer[2] = input[1];
strList.set(0, Character.toLowerCase(strList.get(0)));
answer[0] = listToString(strList);
for(int i = 0; i < strList.size(); i++){
if (Character.isUpperCase(strList.get(i))){
strList.add(i, '_');
strList.set(i + 1, Character.toLowerCase(strList.get(i+1)));
i++;
}
}
answer[1] = listToString(strList);
}
sb.append(answer[0]).append('\n').append(answer[1]).append('\n').append(answer[2]);
System.out.println(sb);
}
private static String listToString(List<Character> list){
StringBuilder sb= new StringBuilder();
for (char c : list){
sb.append(c);
}
return sb.toString();
}
private static String CapitalizeFirstWord(String str){
return Character.toUpperCase(str.charAt(0)) + str.substring(1);
}
}
char[] 배열은 가변배열이 아니므로 크기를 동적으로 변경하려면 ArrayList를 활용(문자 배열을 리스트로 관리하면서 삽입/삭제가 많을 때 유용)
https://velog.io/@seha01130/ArrayList-정리
Character.toUpperCase()는 새로운 문자를 반환할 뿐, 원본 리스트를 수정하지 않음.
set(index, newChar)를 사용해야 리스트 값을 변경할 수 있음.
strList.set(0, Character.toUpperCase(strList.get(0)));
listToString 함수에서 StringBuilder 자체를 return할 수 없다. sb.toString()으로 string형으로 변환 후 return해야 함.
- String : 불변(immutable)한 문자열 객체
- StringBuilder : 가변(mutable)한 문자열 객체 → 내부적으로 char[] 배열을 사용하여 동적으로 문자열을 조작함

