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 |
Tags
- 스택/큐
- Level 4
- DFS
- 코드 리뷰
- 백준
- 시뮬레이션
- 2020 카카오 인턴십
- c++
- 그리디
- DP
- pass
- 2019 KAKAO BLIND
- 2020 KAKAO BLIND
- next_permutation
- 브루트포스
- 부스트코스
- SWEA
- 구현
- level 1
- Gold 4
- 월간 코드 챌린지
- 백트래킹
- Level 3
- Web
- Gold 5
- BFS
- 삼성 SW 역량 테스트
- Level 2
- 프로그래머스
- 코드리뷰
Archives
- Today
- Total
Min:D's Devlog
[프로그래머스][월간 코드 챌린지 시즌 1][C++] 3진법 뒤집기 본문
문제
프로그래머스 월간 코드 챌린지 시즌 1 - 3진법 뒤집기 (Level 1)
문제 풀이
접근 방식
이 문제는 프로그래머스 월간 코드 챌린지 시즌 1 (10월)의 1번 문제로,
주어진 숫자 n을 3진법으로 바꿔 표현하고, 이를 뒤집은 숫자를 다시 10진법으로 표현하는 문제였다.
우선, n을 3진법으로 표현하기 위해 while문을 통해
result 벡터에 n을 3으로 나눈 나머지를 저장해주었다.
이는 n을 3으로 계속 나눠 n이 0이 될 때까지 수행해주었다.
while (n != 0) {
result.push_back(n % 3);
n /= 3;
len++;
}
이렇게 3진법으로 표현한 숫자를 뒤집어서 10진법으로 표현하기 위해
result 벡터의 맨 뒤의 숫자(result[i])에서부터 3의 (len - i - 1) 제곱을 곱하여 더해주어 최종적인 답을 구해주었다.
for (int i = len - 1; i >= 0; i--) {
answer += result[i] * pow(3, len - i - 1);
}
풀이 코드 - C++
#include <vector>
#include <cmath>
using namespace std;
int solution(int n) {
vector<int> result;
int answer = 0;
int len = 0;
while (n != 0) {
result.push_back(n % 3);
n /= 3;
len++;
}
for (int i = len - 1; i >= 0; i--) {
answer += result[i] * pow(3, len - i - 1);
}
return answer;
}
실행 결과
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][해시][C++] 완주하지 못한 선수 (0) | 2020.11.30 |
---|---|
[프로그래머스][월간 코드 챌린지 시즌 1][C++] 쿼드압축 후 개수 세기 (0) | 2020.11.19 |
[프로그래머스][힙][C++] 더 맵게 (0) | 2020.10.28 |
[프로그래머스][해시][C++] 베스트앨범 (0) | 2020.10.26 |
[프로그래머스][스택/큐][C++] 프린터 (0) | 2020.10.23 |
Comments