일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- go 환경변수
- go air 환경변수
- go 캐릭터
- go 마스코트
- clean architecture middleware
- go channel
- 개발자
- go 패닉
- go디자인패턴
- go middleware
- 신입개발자
- gin recovery
- go 맥
- gin logger
- go clean architecture
- go 대기그룹
- go panic
- gopath 환경변수
- git
- go
- go recover
- air 환경변수
- go air
- golang gopher
- 고루틴 채널
- gin middleware
- go 맥 air
- 골랑 고퍼
- 좀비고루틴
- go 맥 air 환경변수
- Today
- Total
뽀미의 개발노트
백준 2292 벌집 본문
백준 2292
딱보니 군수열이네!!
1군 항 - 1개
2군 항 - 6개 2*6 - 6
3군 항 - 12개 3*6 - 6
4군 항 - 18개 4*6 - 6
.
.
.
n군 항 : 6n-6개임!!! (n>=2)
1군 마지막 항 - 1
2군 마지막 항 - 7 = 1 + 6
3군 마지막 항 - 19 = 1 + 6 + 12
4군 마지막 항 - 37 = 1 + 6 + 12 + 18
.
.
.
n군 마지막 항 : 1 + 6n-6을 n-1개 더해주기
1 + (6 + 12 + 18 + ... + 6n-6)
1 + (6n)*(n-1)/2
1 + 3n*(n-1)
3n^2-3n+1
이전 군의 마지막 항에다가 자기 항 갯수 더해주기
이렇게 각 군의 마지막 항까지 찾았음..
입력된 숫자가 만약 13이면 2군 막항과 3군 막항의 사이 숫자기 때문에 3이 답임!
N은 1000000000보다 작을 거랬는데 숫자 넣고 돌려보니 2만군보다 아래만 다룸!!
반복문으로 몇군에 있는지 찾아야 하나?
그럼 시간 초과될 것 같긴 하다만 그래도 한번 해보자!
마지막 항 구하는 함수 만들고
N입력 됐을때 반복문 돌면서 N이 i군 막항이랑 i+1군 막항 사이에 있으면
i+1을 출력하도록 해줬음!!
N이 1일때는 좀 예외라 미리 위에다가 빼줬음.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
if (N == 1) {
System.out.println(1);
}
else {
for (int i = 1; i <= 20000; i++) {
if (N > get_last_term(i) && N <= get_last_term(i + 1)) {
System.out.println(i + 1);
break;
}
}
}
}
private static int get_last_term(int i) {
return (int) (3 * Math.pow(i, 2)) - 3 * i + 1;
}
}
'Algorithm_Test' 카테고리의 다른 글
sw 1961. 숫자 배열 회전 (자바) (0) | 2023.08.11 |
---|---|
sw 1940. 가랏! RC카! (자바) (0) | 2023.08.06 |
sw 1989. 초심자의 회문검사 (자바) (0) | 2023.08.04 |
백준 10250 ACM 호텔 (1) | 2023.03.15 |
백준 2869 달팽이는 올라가고 싶다 (0) | 2023.03.15 |