▶ BufferedReader, BufferedWriter를 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
입력 & 출력
나의 풀이
문제를 보자마자 charAt() 메서드를 활용해야겠다고 생각했습니다.
입력을 받아준 N을 String으로 변환하여 newNum 변수에 저장을 해줍니다. 그리고 N이 만약에 10보다 작으면 앞에 0을 붙여줍니다.
그리고 새로운 값을 찾기 위하여 while문을 사용해주고, String으로 변환한 N을 charAt() 메서드를 사용하여 앞 뒤 값을 분리하여 a와 b로 저장해 줍니다.
그리고 a와 b를 더해줘야 하기 때문에 다시 int형으로 변환하여 sum 값에 더해주고, 다시 String 타입 tmp 변수에 String으로 캐스팅한 후 저장을 해줍니다.
새로운 값을 계산하기 위하여 앞서 분리한 b와 tmp의 마지막 숫자를 다시 한번 charAt() 메서드를 사용하여 더해줍니다.
그러면 새로운 수 newNum이 나오게 되고 사이클 cnt변수를 증가해 줍니다.
하나의 사이클이 끝나면 n과 newNum을 비교하고 같으면 사이클 횟수인 cnt를 출력해 주고 break를 사용하여 while문을 빠져나옵니다.
캐스팅이 많이 일어나는 코드이기 때문에 가독성이 좋지 않은 것 같지만 속도는 108ms로 "다른 풀이"에서 설명할 코드의 144ms 보다는 속도가 빠르게 나왔습니다.
다른 풀이 ✅
"나의 풀이" 보다는 확실히 간결하고 가독성이 좋아 보입니다
코드 설명을 하자면 N은 0보다 크거나 같고, 99보다 작거나 같은 정수이기 때문에 나눗셈 연산자 "/"와 나머지 연산자 "%"를 사용하여 10의 자리와 1의 자릿수를 구해서 a와 b에 저장을 해줍니다.
두 값을 더하고 b값이 10의 자리가 되어야 하기 때문에 10을 곱해준 값에 sum의 1의 자리 수를 더해주어 새로운 수를 구해줍니다.
그리고 cnt을 증가시켜 주고 n과 새로운 수를 비교하여 같으면 while문을 빠져나와 마무리했습니다.
참고 ❗
'Coding Test > 백준' 카테고리의 다른 글
[백준] 문자열 반복 (Java, 2675번, BufferedReader, StringBuilder) (0) | 2024.05.19 |
---|---|
[백준] 알파벳 찾기 (Java, 10809번) (0) | 2024.05.18 |
[백준] 빠른 A+B (Java, 15552번, BufferedReader) (0) | 2024.05.16 |
[백준] 킹, 퀸, 룩, 비숍, 나이트, 폰 (Java, 3003번, BufferedReader) (0) | 2024.05.12 |
[백준] 개수 세기 (Java, 10807번) (0) | 2024.05.12 |