https://www.acmicpc.net/problem/2292
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
알고리즘
N | 벌집 개수(방 개수) | COUNT (최소 루트) |
1 | 1 | 1 |
2 ~ 7 | 6 | 2 |
8 ~ 19 | 12 | 3 |
20 ~ 37 | 18 | 4 |
38 ~ 61 | 24 | 5 |
- N이 속해 있는 범위 내의 숫자들 : 최소 루트가 동일함
- 벌집 개수 : 6의 배수로 증가
풀이
1. Scanner
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int count = 1; //최소 루트
int range = 2; //벌집 개수 범위에 따른 최소값
//1 제외, 2.. 8.. 20.. 38...
if (N == 1) {
System.out.print(1);
} else {
while(range <= N) { //각 범위의 최소값이 N 이하일 때까지
range += (6 * count); //다음 벌집 개수 범위의 최솟값으로 초기화
count++;
}
System.out.print(count);
}
}
}
2. BufferedReader
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int count = 1; // 겹 수(최소 루트)
int range = 2; // 범위 (최솟값 기준)
if (N == 1) {
System.out.print(1);
} else {
while(range <= N) { //각 범위의 최소값이 N 이하일 때까지
range += (6 * count); //다음 벌집 개수 범위의 최솟값으로 초기화
count++;
}
System.out.print(count);
}
}
}
성능
- BufferedReader > Scanner
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 2869번 : 달팽이는 올라가고 싶다 - Java (0) | 2022.03.24 |
---|---|
[백준] 1193번 : 분수찾기 - Java (0) | 2022.03.23 |
[백준] 1712번 : 손익분기점 - Java (0) | 2022.03.22 |
[백준] 1316번 : 그룹 단어 체커 - Java (0) | 2022.03.22 |
[백준] 2941번 : 크로아티아 알파벳 - Java (0) | 2022.03.22 |
댓글