1. 문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
- 제한 사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
2. 풀이 코드
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
vector<int> arr = {};
while (n > 0)
{
arr.push_back(n % 3);
n /= 3;
}
int root = 1;
for (int i = arr.size()-1; i >= 0; i--)
{
answer += arr[i] * root;
root *= 3;
}
return answer;
}
3. 정리
나머지 연산을 통해 3진법을 구한다. push_back 함수를 써서 배열에 넣으면 마치 뒤집어진 것처럼 배열에 들어간다.
그리고 나서 1의 자리부터 3진법->10진법 변환 작업을 해야하므로 배열의 뒤부터 접근하여 계산하다.
전체 시간 복잡도는 O(log n) + O(log n) = O(log n)
1. n이 while문에서 3으로 0이 될때까지 계속 나누므로 시간 복잡도가 O(log n)이다.
2. 다음 for문에서 1번에서 순회할 크기가 log n 만큼 작아졌으므로 시간복잡도가 O(log n) 이다.
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/68935
'Algorithm' 카테고리의 다른 글
| [프로그래머스] 삼총사 (0) | 2025.03.13 |
|---|---|
| [프로그래머스] 이상한 문자 만들기 (0) | 2025.03.13 |
| [프로그래머스] 예산 (0) | 2025.03.12 |
| [프로그래머스] 크기가 작은 부분 문자열 (0) | 2025.03.10 |
| [프로그래머스] 최대공약수와 최소공배수 (0) | 2025.03.10 |