일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gin middleware
- go 마스코트
- air 환경변수
- 고루틴 채널
- gin logger
- gopath 환경변수
- go 맥 air
- 신입개발자
- go 대기그룹
- go 맥 air 환경변수
- go 맥
- go panic
- go 캐릭터
- go air 환경변수
- git
- golang gopher
- go clean architecture
- 골랑 고퍼
- 좀비고루틴
- go 패닉
- go recover
- go air
- go middleware
- clean architecture middleware
- 개발자
- go 환경변수
- go
- go channel
- go디자인패턴
- gin recovery
- 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 |