▶ BufferedReader, StringTokenizer을 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
입력 & 출력
나의 풀이
문제 자체는 간단한데 풀이를 하다가 실수한 부분이 있어 정리할 겸 포스팅을 하게 되었습니다.
입력이 주어질 때 입력이 asending 오름차순, desecending 내림차순으로 입력되었는지 판별하는 문제입니다.
빠른 입력을 위해 BufferedReader 클래스를 사용하여 입력을 받아주고, 오름차순과 내림차순을 판단할 길이 8의 배열 arr을 만들어줍니다.
13,14번째 줄에서 asending과 desecending을 true로 초기화해줘야 합니다. 그 이유는 밑에서 설명하겠습니다.
16번째 줄에서 각 요소를 정수형으로 캐스팅하여 저장해 주고, 이후에 arr 배열을 순회하면서 전 값과 현재 값을 비교하여 asending과 desending을 false로 만들어줍니다.
마지막으로 true값에 해당하는 요소를 출력하여 마무리해 줬습니다.
처음 풀이에선 여기서 실수했던 점이 있는데 처음에는 false로 초기화를 해줬습니다.
왜냐하면 이후 for문에서 값을 비교할 때 전 값이 더 크면 내림차순이기 때문에 if문으로 판단을 하고 내림차순이면 decending을 true로 바꿔줍니다.
- 1 2 3 4 5 6 7 8
- 8 7 6 5 4 3 2 1
근데 위 같은 입력이 주어졌을 땐 정상적으로 출력이 되지만 (8 1 7 2 6 3 5 4)가 입력으로 주어진다면 ascending이 결과로 나옵니다.
왜냐하면
- i = 1: arr [1] = 1 vs arr [0] = 8
- 1 < 8, 따라서 descending = true;
- i = 2: arr [2] = 7 vs arr [1] = 1
- 7 > 1, 따라서 ascending = true;
- i = 3: arr [3] = 2 vs arr [2] = 7
- 2 < 7, 따라서 descending = true;
- i = 4: arr [4] = 6 vs arr [3] = 2
- 6 > 2, 따라서 ascending = true;
- i = 5: arr [5] = 3 vs arr [4] = 6
- 3 < 6, 따라서 descending = true;
- i = 6: arr [6] = 5 vs arr [5] = 3
- 5 > 3, 따라서 ascending = true;
- i = 7: arr [7] = 4 vs arr [6] = 5
- 4 < 5, 따라서 descending = true;
- 플래그 값:
ascending = true
descending = true
그래서 두 개의 플래그 값이 true이기 때문에 25번째 줄에서 if문을 만족하여 "asending"이 출력됩니다.
참고 ❗
'Coding Test > 백준' 카테고리의 다른 글
[백준] 피보나치 수 2 (BufferedReader, 동적 계획법 DP, 2748번, Java) (0) | 2024.05.29 |
---|---|
[백준] 2007년 (BufferedReader, StringTokenizer, 1924번, Java) (0) | 2024.05.29 |
[백준] 최대공약수와 최소공배수 (BufferedReader, StringTokenizer, 유클리드 호제법) (0) | 2024.05.25 |
[백준] ACM 호텔 (BufferedReader, StringTokenizer, StringBuilder, 10250번, Java) (0) | 2024.05.24 |
[백준] 손익분기점 (BufferedReader, 1712번, Java) (0) | 2024.05.24 |