백준
백준 - 2292 벌집
gebalza
2022. 12. 1. 00:55
https://www.acmicpc.net/problem/2292
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
int a = scan.nextInt(); //입력받고
if(a==1) System.out.println(1); //1일땐 1
else{ //1아닐땐
a = a-2; //2를 빼줘서 규칙 만들어주고
int c = 1; //카운트 만들고
for(int i=6;i<=2000000000;i=6*c+i){ //조건에 맞는 수 반복문으로 돌리고
if(a<i) { //만약 조건에 포함되는 수다
System.out.println(c+1); //카운트에 1추가해준 수 출력하고
break; //끝
}
c = c+1; //아니면 카운트에 1추가해서 다시돌림
}
}
}
}
코드 해석
벌집의 규칙을 살펴보니
1 / 2~7 / 8~19 / 20~37 /... 이런 식으로 진행이 되고 있었다
문제 자체가 시간을 빡빡하게 주는거 같지 않아 그냥 전부 넉넉하게 돌리기로 했다.
대충 2000000000이라는 숫자만큼 돌려 주기로했다 별의미없다
1은 어짜피 하나니깐 if문으로 1 출력되게 빼주고
1이 아닐때는 2를 빼줘서 0~5/6~17/18~35... 이런 식으로 만들어 주었다
그러면 규칙이 보이는데
6보다 작은수 / 18보다 작은 수 / 36보다 작은 수.. 이런 식으로 진행이 되고 있었다
따라서 6*카운트+전의 수 -> 6*c+i라는 수식을 만들 수 있었다
예를 들어서 18은 두번째 수고, 전의 수가 6이니깐 6*2+6 = 18이 되는 식으로 말이다.
그래서 만약 수가 18보다 작으면 카운트에 1추가 (아까 따로 빼준 1 부분을 더해주는 것) 해주고 출력해주고,
조건을 만족하지 못한다면 카운트에 1 더해준다.
오늘의 한마디
while문 쓸걸
반응형