remagine
알고리즘 풀기 (9) 벌집 (보통) 본문
벌집 성공
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
1. 내풀이
123456789101112131415161718192021222324252627282930313233 import java.util.Scanner; public class Main { public static void main(String... args) { Scanner sc = new Scanner(System.in); int test = sc.nextInt(); sc.close(); int path = 1; int x = 0; int n = 1; if (test == 1) { System.out.println(path); return; } for(int i =0; i < test ; i++){ x = x +6; n = n +x; if(n <test){ path++; } else{ break; } } System.out.println(path+1); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import java.util.Scanner; public class Main { public static void main(String... args) { Scanner sc = new Scanner(System.in); int test = sc.nextInt(); sc.close(); int path = 1; int x = 0; int n = 1; if (test == 1) { System.out.println(path); return; } for(int i =0; i < test ; i++){ x = x +6; n = n +x; if(n <test){ path++; } else{ break; } } System.out.println(path+1); } } |
2. 다른 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import java.io.*; class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); long a=Long.parseLong(br.readLine()); int n = 1; int x = 1; while(n<a){ n += x*6; x++; } System.out.println(x); } } |
'알고리즘' 카테고리의 다른 글
알고리즘 풀기 (12) : A binary gap (0) | 2017.08.18 |
---|---|
알고리즘 풀기 (10) 문자열 반복 (약간 쉬움) (0) | 2017.08.11 |
알고리즘 풀기 (8) 분수찾기 (보통) (0) | 2017.06.29 |
알고리즘 풀기 (7) 알파벳 찾기 (쉬움) (0) | 2017.06.29 |
알고리즘 풀기 (6) OX퀴즈 (쉬움) (0) | 2017.06.27 |
Comments