ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘 문제] 백준 알고리즘 4458번 : 첫글자를 대문자로
    IT/알고리즘 2019. 3. 20. 11:00



    내가 가장 먼저 생각한 방식은 이러하다


    1. String으로 문자열을 입력받고 charAt(index) 메소드를 통해서 첫번째 문자를 읽어온다.

    2. 이 문자를 toUpperCase()를 통해 대문자로 변환한다

    3. 반복문을 통해서 첫번째 문자를 제외한 나머지 문자들을 출력한다.



    소스코드 ↓↓↓


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public class ABCupper {
     
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner scan = new Scanner(System.in);
            
            int N = scan.nextInt();
            
            String[] alphabet = new String[N];
            
            scan.nextLine();
            
            for(int i=0; i<N; i++) {
                alphabet[i] = scan.nextLine();
            }
            
            for(int i=0; i<N; i++) {
                System.out.print(alphabet[i].toUpperCase().charAt(0));
                for(int j=1; j<alphabet[i].length(); j++) {
                    System.out.print(alphabet[i].charAt(j));
                }
                System.out.println();
            }
     
        }
     
    }
     
    cs



    실행 결과 ↓↓↓




    제대로 동작하는 것을 확인할 수 있다!!


     처음에는 코드를 작성하고 실행했을때는 next()를 사용했는데 이때문에 문장에서 띄어쓰기를 할때마다 다음 입력으로 넘어가져서 많이 헤맸다 ㅠㅠ 그래서 nextLine()을 사용했는데 이 또한 띄어쓰기에서 문제가 있었다.


    문제의 오류 



    오류 원인에 대해 찾아본 결과 



    입력 받을 개수가 가변적인데 그 사이에 공백이 있을 경우

    1) int는 nextInt로 char는 nextLine으로 받으면 문제가 발생한다.

    -> 숫자를 입력받고 엔터를 치면 Exception이 발생한다. nextInt()로 입력을 받기 때문에 개행문자 전까지만 입력을 받고 개행문자(\n)는 다음 nextLine이 읽었기 때문이다. 이를 해결하기 위해선 nextInt() 와 nextLine() 함수 사이에 nextLine()함수를 한번 더 사용해 개행문자를 제거하도록 한다.   출처 - Limky 삽질블로그

    라는 내용의 글을 찾을 수 있었다.

    그래서 문장을 입력받기 전에 scan.nextLine();를 한번 더 실행시켜 개행문자를 제거한 후에야 올바른 값을 출력할 수 있었다!

    댓글

Designed by Tistory.