사용언어 : C++
문제풀이
* 다음 값을 가진 index의 check값이 0이 아닐 때까지 while문 실행한다.
while문을 실행할 때마다 cnt를 +1하고 해당 cnt값을 check배열 해당 index에 저장.(수열에 남는 수 갯수 출력해야 함)
-다음 값 구하는 함수
현재 값이 0이 될 때까지 10으로 나눈 나머지 값을 다음 값에 저장-> 현재 값10으로 나누기
int next_num(int bnum) {
int nnum = 0; //다음 값
while (bnum != 0) { //현재 값
nnum += pow(bnum % 10, P);
bnum /= 10;
}
return nnum;
}
- 반복되는 수열 갯수 찾기
int next = next_num(A); //처음 값 설정해주기
while (check[next] == 0) { //전에 나온 적 있는 수가 나오면 while문 종료
cnt++;
check[next] = cnt; //저장해놓기
next = next_num(next);
}
cout << check[next] - 1; //출력값
전체코드
#include<iostream>
using namespace std;
#include<cmath>
int check[300000];
int cnt = 1;
int A, P;
int next_num(int bnum) {
int nnum = 0;
while (bnum != 0) {
nnum += pow(bnum % 10, P);
bnum /= 10;
}
return nnum;
}
int main() {
cin >> A >> P;
check[A] ++;
int next = next_num(A);
while (check[next] == 0) {
cnt++;
check[next] = cnt;
next = next_num(next);
}
cout << check[next] - 1;
}
총평
문제 자체가 복잡하진 않았는데 그 다음 값을 구하는 (나한텐 조금 복잡한) 부분에서 좀 헤맸다. 물론 다른 곳에서도 헤맸음ㅎ
문제 출처
https://www.acmicpc.net/problem/2331
2331번: 반복수열
첫째 줄에 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 출력한다.
www.acmicpc.net
'CodingTest > BOJ' 카테고리의 다른 글
[BOJ 1654] 백준 랜선 자르기 풀이 - C++ (0) | 2021.09.18 |
---|---|
[BOJ 1920] 백준 수 찾기 풀이 - C++ (0) | 2021.09.13 |
[BOJ 2606] 백준 바이러스 풀이 - c++ (0) | 2021.09.12 |
[BOJ 8958] 백준 OX퀴즈 풀이 - C++ (0) | 2021.09.10 |
[BOJ 3052] 백준 나머지 풀이 - C++ (0) | 2021.09.07 |