반응형
문제(출처)
위의 그림과 같이 육각형으로 이루어진 벌집이 있다.
그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다.
숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오.
예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
예제 입력
13
예제 출력
3
내 풀이
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;
public class Main { public static void main(String args[]) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try { int num = Integer.parseInt(br.readLine());// 찾고자 하는 번호를 입력 받습니다. int result = honeryCombCount(num);// 입력 받은 값을 인자로 전달하고 결과를 반환합니다. bw.write(String.valueOf(result)); bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } } private static int honeryCombCount(int num) {// 처음 1을 제외하고 6씩 증가하는 벌집의 규칙을 푸는 문제입니다. int checkNum = 0;// 규칙적으로 6씩 증가하는 값을 저장 할 변수를 선언합니다. num -= 1;// 처음 1번의 값을 미리 빼줍니다. int count = 1;// 처음 1번을 미리 카운트합니다. while(num > 0) {// 0보다 작을때까지 반복합니다. checkNum +=6;// 6씩 증분하고 누적하여 저장합니다. num -= checkNum;// 증분한 값을 입력 받은 값에서 빼줍니다. count++;// 반복문이 반복 될때마다 카운트합니다. } return count; }}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String args[]) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
int num = Integer.parseInt(br.readLine());
// 찾고자 하는 번호를 입력 받습니다.
int result = honeryCombCount(num);
// 입력 받은 값을 인자로 전달하고 결과를 반환합니다.
bw.write(String.valueOf(result));
bw.flush();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static int honeryCombCount(int num) {
// 처음 1을 제외하고 6씩 증가하는 벌집의 규칙을 푸는 문제입니다.
int checkNum = 0;
// 규칙적으로 6씩 증가하는 값을 저장 할 변수를 선언합니다.
num -= 1;
// 처음 1번의 값을 미리 빼줍니다.
int count = 1;
// 처음 1번을 미리 카운트합니다.
while(num > 0) {
// 0보다 작을때까지 반복합니다.
checkNum +=6;
// 6씩 증분하고 누적하여 저장합니다.
num -= checkNum;
// 증분한 값을 입력 받은 값에서 빼줍니다.
count++;
// 반복문이 반복 될때마다 카운트합니다.
}
return count;
}
}
내 풀이 해석
1을 제외하고 6씩 증가하는 벌집문제입니다.
처음 1을 제외하고 6, 12, 18, 24로 증가합니다.
1은 시작점으로 1을 미리 빼주고 세어줍니다.
0보다 작을 때까지 6씩 증분하여 누적한 후 반복문이 반복 될 때마다 세어줍니다.
반응형
'개발(합니다) > 알고리즘&코테' 카테고리의 다른 글
알고리즘 단계별로 풀어보기 : BOJ-1011(Fly me to the Alpha Centauri) (0) | 2018.12.23 |
---|---|
알고리즘 단계별로 풀어보기 : BOJ-1193(분수찾기) (0) | 2018.12.23 |
알고리즘 단계별로 풀어보기 : BOJ-2941(크로아티아알파벳) (0) | 2018.12.22 |
알고리즘 단계별로 풀어보기 : BOJ-5622(다이얼) (0) | 2018.12.22 |
알고리즘 단계별로 풀어보기 : BOJ-2908(상수) (0) | 2018.12.22 |