[백준] 2331번 : 반복수열

김개발·2021년 9월 30일
0

백준

목록 보기
45/75

문제 푼 날짜 : 2021-09-30

문제

문제 링크 : https://www.acmicpc.net/problem/2331

접근 및 풀이

아래의 생각대로 코드를 구현하였다.

  1. 주어진 조건에 맞게 수열에 들어갈 값들을 만들어주면서 vector에 넣어준다.
  2. 이 때, vector에 이미 등장한 적이 있는 숫자라면
    2-1. 그 숫자가 등장한 위치부터 뒤에 나오는 모든 숫자들은 반복된다는 의미이므로 더이상 진행하지 않는다.
    2-2. 처음부터 그 위치까지 몇 개의 숫자가 등장했는지 세어주고 그 값을 return해준다.

코드

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std;

int convert(int num, int p) {
    int ret = 0;
    while (num) {
        int tmp = num % 10;
        ret += pow(tmp, p);
        num /= 10;
    }
    return ret;
}

int main() {
    int A, P, ret = 0;
    vector<int> v;
    cin >> A >> P;
    
    v.push_back(A);
    
    while (true) {
        int num = convert(v.back(), P);
        auto it = find(v.begin(), v.end(), num);
        
        if (it != v.end()) {
            ret = it - v.begin();
            break;
        } else {
            v.push_back(num);
        }
    }
    cout << ret;
    return 0;
}

결과

피드백

너무 문제를 어렵게 생각하지말되, 주어진 조건을 확실히 체크하여 구현하도록 하자.

profile
개발을 잘하고 싶은 사람

0개의 댓글