Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다이나믹프로그래밍
- 컴퓨터 네트워크
- 알고리즘
- 자바
- 브루트포스
- 그리드 알고리즘
- 다이나믹 프로그래밍
- SQL
- 재귀
- 스프링
- 역방향 반복자
- 그리드
- AWS
- TCP
- dfs
- 백준
- HTTP
- BFS
- 트리
- GIT
- github action
- 이분탐색
- 분할 정복
- 도커
- Spring
- 자료구조
- 그래프
- 분할정복
- 순열
- CI/CD
Archives
- Today
- Total
코딩성장스토리
백준 2331번:반복수열 본문
https://www.acmicpc.net/problem/2331
2331번: 반복수열
첫째 줄에 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 출력한다.
www.acmicpc.net
이 문제는 check배열에 값이 나왔으면 true로 저장한다음 똑같은 값이 나오면 종료하는 프로그램을 만들었다.
그리고 종료된다음 그 값까지의 개수를 구한다음 답을 구했다.
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<set>
#include<cstring>
using namespace std;
bool check1[1000000] = { 0 };
int cycle(int a,int p) { //각자리의 수 p의 제곱만큼 더한 값 함수
int sum = 0;
while (a) {
int n = a % 10;
a = a / 10;
sum += pow(n,p);
}
return sum;
}
int main()
{
int n, p;
vector<int> a;
cin >> n >> p;
while (check1[n] !=true) { //이미 들렀던 수면 탈출
check1[n] = true; //n의 값 방문했으므로 true
a.push_back(n);
n = cycle(n,p);
}
int cnt = 0;
int len = a.size();
for (int i = 0; i < len; i++) {
if (a[i] == n) //반복된 수가 나오면 탈출
break;
cnt++;
}
cout << cnt;
return 0;
}
'백준 코딩' 카테고리의 다른 글
백준 2667번:단자번호붙이기 (0) | 2021.10.07 |
---|---|
백준:9466번 팀 프로젝트 (0) | 2021.10.06 |
백준:10451번 순열사이클 (0) | 2021.10.04 |
백준 11724번:연결 요소의 개수 (0) | 2021.10.01 |
백준 1260번:DFS와 BFS (0) | 2021.10.01 |