▶ BufferedReader를 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
나의 풀이
문제를 보면 육각형을 이루고 있는 벌집을 중앙의 1부터 시작해서 입력되는 번호 방까지 최소 몇 개의 방을 지나가는지 알아내는 문제입니다.
왼쪽 그림처럼 방 6개가 1개의 layer로 구성되어있습니다.
즉 1개의 방 ➡️ 1 layer (1)
2 ~ 7개의 방 ➡️ 2 layer (1 + 6*1)
8 ~ 19개의 방 ➡️ 3 layer (1 +6 +6*2)
20 ~ 37개의 방 ➡️ 4 layer (1 +6 +12 + 6*3)
위 같은 규칙을 같게 됩니다.
빠른 입력을 위해 BufferedReader 클래스를 사용했습니다.
"나의 풀이"를 설명하자면 layer를 몇 번 돌았는지 계산하기 위하여 while문의 조건에 layer < n라는 조건을 넣어줍니다.
while문 안에는 위에서 말한 규칙대로 6의 배수대로 증가하기 위하여 cnt * 6을 해주고, cnt를 증가시켜 줍니다.
그러면 만약에 N 이 13이 들어오면
layer = 1 + 6 * 1 = 7
layer = 7 + 6 * 2 = 19 -> cnt =3
위와 같이 동작하고 3을 출력하여 마무리했습니다.
참고 ❗
[JAVA] 입출력, BufferedReader, StringTokenizer
Java로 코딩테스트를 보거나 입력을 사용해야 할 때 Scanner 클래스를 사용하면 편리하지만 속도가 느리다는 단점이 있습니다. 그렇기 때문에 속도가 빠른 BufferReader 클래스를 사용을 하면 시간복
pixx.tistory.com
'Coding Test > 백준' 카테고리의 다른 글
[백준] 블랙잭 (BufferedReader, Brute Force, Java) (0) | 2024.05.23 |
---|---|
[백준] 다이얼 (BufferedReader, 5622번, charAt(), contains()) (0) | 2024.05.23 |
[백준] 소수 찾기 (BufferedReader, StringTokenizer, 1978번) (0) | 2024.05.21 |
[백준] 평균은 넘겠지 (BufferedReader, 4344번, stream, StringTokenizer) (0) | 2024.05.21 |
[백준] 단어 공부 (Java, 1157번, BufferedReader, charAt) (0) | 2024.05.20 |