티스토리 뷰
백준 온라인 저지(BOJ) 9461번 파도반 수열
https://www.acmicpc.net/problem/9461
9461번: 파도반 수열
오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의
www.acmicpc.net
* 사용언어 : C언어, C++
1. 문제
아래 그림과 같이 삼각형들이 나선 모양(시계 방향)으로 놓여져 있음
P(N)은 나선 중 N번째 정삼각형의 변의 길이일 때 P(N)을 출력
2. 풀이
수열의 규칙을 찾아 bottom-up 방식으로 구현하여 풀면 됩니다.
초반 삼각형들을 살펴보면 규칙이 잘 안 보이는데 오히려 그림에서 큰 삼각형(7, 9, 12 등)을 보면 규칙이 쉽게 보입니다.
9의 경우 인접한 7과 2를 합쳐서 만들어지고, 12의 경우 9와 3을 합쳐서 만들어집니다.
따라서 [n번 정삼각형] 변의 길이는 [n - 1번]과 [n - 5번] 정삼각형의 변의 길이의 합이라는 것을 알 수 있습니다.
그렇기 때문에 1부터 5까지는 초기값을 그대로 세팅하고(p[1] = p[2] = p[3] = 1, p[4] = p[5] = 2)
위 규칙에 따라 100번 까지 합을 한 번만 구해놓고서 N에 따라 p[N]을 출력만 해주면 됩니다.
한 가지 주의할 점은 p[79] 부터 int의 범위(약 -21억 ~ 21억)를 넘기 때문에
배열을 long long으로 선언해주어야 정답이 됩니다.
만약 4%에서 틀렸습니다가 나온다면 범위가 틀린 것이니 배열 Type을 수정하면 됩니다.
3. 코드
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
9461_파도반 수열
1112KB 0ms
*/
#include <cstdio>
const int LM = 101;
long long p[LM];
int T, N;
int main() {
#ifdef _WIN32
freopen("input.txt", "r", stdin);
#endif // _WIN32
scanf("%d", &T);
p[1] = p[2] = p[3] = 1;
p[4] = p[5] = 2;
for (int i = 6; i < LM; ++i) p[i] = p[i - 1] + p[i - 5];
while (T--) {
scanf("%d", &N);
printf("%lld\n", p[N]);
}
return 0;
}
* long long 출력 시 "%d"가 아닌 "%lld"를 사용해야 합니다.
'개발자 > 문제풀이 (C언어)' 카테고리의 다른 글
[백준/BOJ] 1932번 정수 삼각형 (C/C++) (0) | 2024.03.05 |
---|---|
[백준/BOJ] 1149번 RGB거리 (C/C++) (0) | 2024.02.28 |
[백준/BOJ] 1904번 01타일 (C/C++) (0) | 2024.02.25 |
[백준/BOJ] 9184번 신나는 함수 실행 (C/C++) (0) | 2024.02.24 |
[백준/BOJ] 24416번 알고리즘 수업 - 피보나치 수 1 (C/C++) (0) | 2024.02.24 |
- Total
- Today
- Yesterday
- JUNGOL
- 긴 자리 덧셈 뺄셈
- 자료구조
- 긴 자리 곱셈
- 최재천의공부
- 당신도느리게나이들수있습니다
- 세상을 읽는 새로운 언어 빅데이터
- 영화감상평
- 시대예보
- 여가포인트
- 독서감상평
- 독서 감상평
- 안전운전특약
- 정올
- 나의첫죽음학수업
- 자동차보험
- 센터독서클럽
- 삼성전자
- 인간본성불패의법칙
- 정세현의통찰
- 동탄에듀센터
- 유연함의힘
- AdSendse
- 관계가상처가되기전에
- 문현공
- 호암의마지막꿈
- 알고리즘
- 나는늘잘해야한다고생각한다
- 쿠프마케팅
- 동탄에듀센터2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |