백준
백준 2292: 벌집(java/C)
unhyepnhj
2024. 7. 6. 18:23
문제
풀이
중심(1)으로부터 떨어진 바퀴 수? 에 따라 나눌 수 있다
중심을 0번째라고 하면 2~7은 1바퀴째, 8~19는 2바퀴째... 이런 식으로
정리하면 아래와 같습니다.
같은 구간에 속하는 방들끼리는 1번 방에서부터의 경유 방 개수(이하 거리라 하겠음)가 동일하고(원-반지름 개념으로 생각하셔도 괜찮을 듯)
각 구간에 속하는 방 수는 다음 바퀴로 넘어갈 때마다 6개씩 증가한다.
- 같은 구간에 속하는 방은 중심에서부터 거리가 동일
- 구간이 바뀔 때마다 거리가 1씩 증가
이 둘을 이용해 풀이할 수 있다.
int count=1; //중심일 때 거리 1
int ran=2; //구간 최솟값 시작: 2
if(N==1)
System.out.println(1);
else{
while(ran<=N){ //N이 속한 구간에 도달할 때까지 반복
ran=ran+(count*6); //새로운 구간 최솟값=지난 구간의 최솟값+지난 구간의 거리
count++; //구간이 바뀌었으므로 거리 1 증가
}
}
N이 1일 때는 1을 출력하면 되고, 1이 아닐 경우에는 N이 속한 구간까지 반복하며 count를 증가시킨다
[JAVA]
Scanner 대신 BufferedReader를 사용하였다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
int count=1; //방 개수
int ran=2;
int N=Integer.parseInt(in.readLine());
if(N==1)
System.out.println(1);
else {
while(ran<=N) {
ran=ran+(count*6);
count++;
}
System.out.println(count);
}
}
}
[C]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int count = 1;
int ran = 2;
int N;
scanf("%d", &N);
if (N == 1)
printf("%d", 1);
else {
while (ran <= N) {
ran = ran + (count * 6);
count++;
}
printf("%d", count);
}
return 0;
}