[백준(JAVA)] 16205번: 변수명

세하·2025년 2월 16일

[백준] 문제풀이

목록 보기
40/94
post-thumbnail

문제

✔ 난이도 - 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);
    }
}

TIL💡

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[] 배열을 사용하여 동적으로 문자열을 조작함

0개의 댓글