문제 url:
벌집
문제:
N의 값 | 벌집 | 횟수 |
---|---|---|
1 | 1 | 1 |
2 ~ 7 | 6 | 2 |
8 ~ 19 | 12 | 3 |
20 ~ 37 | 18 | 4 |
38 ~ 61 | 24 | 5 |
이런 형태일 수 있다. 즉 벌집의 개수는 6의 배수로 늘어나기 때문에
N값이 어느 범위에 속하는지를 구한 다음 해당 횟수를 찾으면 된다.
1.BufferedReader를 이용해 입력받기
2.n값 입력받기
3.방의 개수를 구할 count 변수 생성
4.범위를 구할 min, max 변수 생성
5.범위안에 있는 값을 찾아 count를 출력하기 위한 while문 생성
6.출력하기
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 2. n값 입력
int n = Integer.parseInt(br.readLine());
// 3. 만약 1일 경우에는 방이 한개이므로,
int count = 1;
int min = 2;
int max = 7;
// 반복해서 n값이 어디에 속하는지 알아보자.
while(true) {
// 4. 만약 n이 1번이라면 첫방 역시 포함하므로 1을 출력
if (n == 1) {
System.out.println(count);
break;
}
count++;
if (n >= min && n <=max) {
System.out.println(count);
break;
} else {
min = min + (6 * (count - 1));
max = max + (6 * count);
}
}
}
}
역시 문제의 규칙을 찾지 못해 오늘도 답지를 뒤적뒤적거린.. 이런 문제를 여러번 반복해서 풀어보며 수학적 감각을 익힐 수 있도록 해야겠다.
또한, 코드를 푸는데에 급급하여 역시나 코드 자체가 정갈하지 못하다.
코드 리팩토링 진행
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 2. n값 입력
int n = Integer.parseInt(br.readLine());
int count = 1; // 겹치는 수 (최소 루트 1도 포함하기 때문)
int min = 2; // max가 n보다 크거나 같기 위해
// 4. 만약 n이 1번이라면 첫방 역시 포함하므로 1을 출력
if (n == 1) {
System.out.println(1);
} else {
// 반복해서 n값이 어디에 속하는지 알아보자.
while(min <= n) {
min = min + (6 * count);
count++;
}
System.out.println(count);
}
}
}
코드는 수는 줄고 불필요한 문구도 지웠는데.. 이상하게 속도는 같고 메모리는 더 많아졌다. 왜일까?