-
[알고리즘 문제] 백준 알고리즘 4458번 : 첫글자를 대문자로IT/알고리즘 2019. 3. 20. 11:00
내가 가장 먼저 생각한 방식은 이러하다
1. String으로 문자열을 입력받고 charAt(index) 메소드를 통해서 첫번째 문자를 읽어온다.
2. 이 문자를 toUpperCase()를 통해 대문자로 변환한다
3. 반복문을 통해서 첫번째 문자를 제외한 나머지 문자들을 출력한다.
소스코드 ↓↓↓
12345678910111213141516171819202122232425262728public class ABCupper {public static void main(String[] args) {// TODO Auto-generated method stubScanner 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();를 한번 더 실행시켜 개행문자를 제거한 후에야 올바른 값을 출력할 수 있었다!
'IT > 알고리즘' 카테고리의 다른 글
[알고리즘 문제] 큐(Queue) - 리스트 활용 (0) 2019.03.28 [알고리즘 문제] 백준 알고리즘 13163번 : 닉네임에 갓 붙이기 (3) 2019.03.25 [알고리즘 문제] 팩토리얼 (0) 2019.03.18 [알고리즘 문제] 백준 알고리즘 2814번 : 최소인수 (0) 2019.03.17 [알고리즘 문제] 백준 알고리즘 1225번 : 이상한 곱셈 (0) 2019.03.11