jeongwon
[백준 JAVA] 2292번 - 벌집 본문
문제:
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
수식 나열/조건 범위 (괄호 안의 숫자는 지나야 할 방의 개수 = 구해야 할 값) :
(1) : 1
(2) : 1 + 1 ~ 1 + 6x1
(3) : 1 + 6x1 + 1 ~ 1 + 6x1 + 6x2
(4) : 1 + 6x1 + 6x2 + 1 ~ 1 + 6x1 + 6x2 + 6x3
.......
....
약식 순서도:
1) 값을 입력받아 변수에 저장한다. (BufferedReader, Integer.ParseInt(), int num)
2) check() 메소드를 호출한 결과값을 출력하고 메소드 종료. (public static int check(int num))
------메소드-----
(1) 개수(도달하는 데 걸리는 수)를 셀 변수와 최소, 최대값을 저장할 변수를 생성하고 각각 1을 저장한다. (int count, min, max)
(2) 매개변수로 받은 num 값이 1인 경우 메소드를 종료하고 count 값을 반환 (count = 1)
(3) 반복문 내에서 min 은 이전의 max 값보다 1씩 크다.
(4) max 는 반복할 때마다 6 x (n+1) 씩 증가한다. count값은 1씩 증가한다.
(5) num 의 값이 각 범위 내에 속하면 메소드를 종료하고 count 값을 반환한다.
답안:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 1)
int num = Integer.parseInt(br.readLine());
System.out.println(check(num)); // 2)
}
public static int check(int num) {
int count = 1; //(1)
int min = 1;
int max = 1;
for(int i=0; i<num; i++) {
if(num == 1) break; //(2)
min = max+1; //(3)
max += 6*(i+1); //(4)
count++;
if(min <= num && num <= max) { //(5)
return count;
}
}
return count;
}
}
그리고.. 풀었다고 신나하면 안 되는 이유..
개선 답안 : (도움받은 곳: https://st-lab.tistory.com/73)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
System.out.println(check(num));
}
public static int check(int num) {
int count = 1;
int range = 2; //min에는 2가 기본으로 더해진다. ( 1 + 6x1 + 1 )
while(range <= num) { //범위는 입력값을 넘을 수 없다.
if(num == 1) break;
range += 6*(count); //각 범위의 최소값으로 볼 수 있다. count를 활용..
count++;
}
return count;
}
}
메소드는 그대로 유지하고 수정해보았다. 보기에도, 성능면에서도 가벼운 코드가 됐다.

'오늘의 문제' 카테고리의 다른 글
| [백준 JAVA] 1712번 - 손익분기점 (0) | 2022.06.17 |
|---|---|
| [백준 JAVA] 1316번 - 그룹 단어 체커 (0) | 2022.06.16 |
| [백준 JAVA] 2941번 - 크로아티아 알파벳 (0) | 2022.06.09 |
| [백준 JAVA] 5622번 - 다이얼 (0) | 2022.06.08 |
| [백준 JAVA] 2908번 - 상수 (0) | 2022.06.08 |