티스토리 뷰
반응형
✏️ 문제 링크
https://www.acmicpc.net/problem/9471
✏️ 문제 설명
✏️ 로직(처음)
- 피사노 주기 찾아보기
- arr[i] = (arr[i-1] + arr[i-2]) % m
- arr[i-1]과 arr[i-2]가 1일 때의 반복횟수를 리턴해준다
- 배열로 하니 메모리도 많이 사용하고 문제에서 요구하는 사항을 맞추지 못할 것 같아서 단순 반복문 이용
✏️ 코드
#include<bits/stdc++.h>
using namespace std;
long long arr[1000001];
long long int fun(long long int m) {
if (m==2)
return 3;
if (m==3)
return 8;
for (long long i = 3; i <= m * m; i++) {
arr[i] = (arr[i - 1] % m + arr[i - 2] % m) % m;
if (arr[i-1] ==1 && arr[i - 2] == 1 && i>3) {
return i-3;
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t, n;
long long int m;
cin>>t;
arr[1]=1;
arr[2]=1;
while(t--) {
cin >> n >> m;
int rate = fun(m);
cout << n << " " << rate << "\\n";
}
}
#include<bits/stdc++.h>
using namespace std;
long long arr[1000001];
long long int find_pisano(long long int m) {
if (m==2)
return 3;
if (m==3)
return 8;
for (long long i = 3; i <= m * m; i++) {
arr[i] = (arr[i - 1] + arr[i - 2]) % m;
if (arr[i-1] ==1 && arr[i - 2] == 1 && i>3) {
return i-3;
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t, n;
long long int m;
cin>>t;
arr[1]=1;
arr[2]=1;
while(t--) {
cin >> n >> m;
cout << n << " " << find_pisano(m) << "\\n";
}
}
#include<bits/stdc++.h>
using namespace std;
long long int find_pisano(long long int m) {
long long a = 1, b = 1;
long long rate = 0;
while (true) {
long long c = (a + b) % m;
a = b;
b = c;
rate ++;
if (a==1 && b==1)
return rate;
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t, n;
long long int m;
cin >> t;
while (t--) {
cin >> n >> m;
cout << n << " " << find_pisano(m) << "\\n";
}
}
✏️ 느낀 점
음 솔직히 이게 왜 맞는지를 모르겠다. 피사노 주기는 m≤ m^2 - 1까지를 허용하는데 내가 한 경우에서는 m이 1000000까지인 경우만 계산이 되는데 저때까지 주기를 못 구하면 틀리는 풀이가 아닌가? 세 번째 풀이가 맞는 풀이 같음
✏️ 결과
다른사람들을 보니 보통 4ms가 걸려서 내 풀이를 다시 보니 굳이 나머지 연산을 한 줄에서 3번을 할 필요가 없어 보여서 나머지 연산 횟수를 줄였더니 8ms가 줄었다.
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[C/C++] 백준 1966번 - 프린터 큐 (4) | 2025.01.10 |
---|---|
[C/C++] 백준 7662번 - 이중 우선순위 큐 (0) | 2025.01.09 |
[C/C++] 백준 2749번 - 피보나치 수 3 (0) | 2025.01.07 |
[C/C++] 백준 2573번 - 빙산 (2) | 2025.01.03 |
[C/C++] 백준 2579번 - 계단 오르기 (0) | 2024.05.12 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 유클리드 호제법
- CSS
- Do it!
- 스택
- C++ Stack
- BFS
- js
- 알고리즘
- 이분 매칭
- 반복문
- c++ string
- 에라토스테네스의 체
- 자바
- 카운팅 정렬
- html
- 백준 풀이
- C++
- 세그먼트 트리
- 유니온 파인드
- 스프링 부트 crud 게시판 구현
- DFS
- 우선순위 큐
- HTML5
- java
- 자료구조
- 알고리즘 공부
- 투 포인터
- DP
- 자바스크립트
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함