- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 알고리즘
- 연결리스트
- 배열
- 프로그래밍 입문
- 안드로이드 스튜디오
- 백준
- 프로그래머스
- 정렬
- 로그인
- 파이썬
- firebase google
- 구글 로그인
- 공유대학
- android studio
- 비주얼 베이직
- oauth
- 컴퓨터공학과
- 동적할당
- C++
- 안드로이드
- Firebase
- 코딩테스트
- Java
- 자바
- python
- til
- C언어
- 자료구조
- sql
Archives
코딩하는 해달이
[level 1] 3진법 뒤집기 본문
문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한 조건
- n은 1 이상 100,000,000 이하인 자연수입니다.
문제 이해
문제 그대로 3진법으로 변환 후 앞뒤로 반전한 다음 10진법으로 변환해서 리턴해야한다.
알고리즘
1. 정수 n을 입력받는다.
2. n을 3진법으로 변환한다.
3. 3진법으로 변환한 n을 문자열로 변환한다.
4. 문자열을 뒤집는다.
5. 문자열을 다시 3진수로 변환한다.
6. 3진법으로 나타난 수를 10진법으로 변환한다.
풀이코드
#include <string>
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
int solution(int n) {
int answer = 0;
int decimal_n = n;
string rv_ternary_n = "";
string num;
for (; decimal_n > 0;)
{
rv_ternary_n += to_string(decimal_n % 3); //3진법 string 반전으로 저장
decimal_n = decimal_n / 3;
}
for (int i = 0; rv_ternary_n.length() > 0; i++)
{
num = rv_ternary_n.back(); //3진법 1의 자리 부터 반환
rv_ternary_n.pop_back(); //3진법 1의 자리 부터 pop
answer += stoi(num) * pow(3, i); //1의자리 * 3^자릿수
} //stoi(num) num이 문자로 추출되었기 때문에 stoi로 정수형으로 변환
return answer;
}
https://school.programmers.co.kr/learn/courses/30/lessons/68935
반응형
'개인 공부 > 프로그래머스' 카테고리의 다른 글
[level 1] 실패율 (0) | 2022.08.02 |
---|---|
[level 1] 약수의 개수와 덧셈 (0) | 2022.07.31 |
[level 1] 예산 (0) | 2022.07.30 |
[level 1] 두 개 뽑아서 더하기 (0) | 2022.07.30 |
[level 1] 나머지가 1이 되는 수 찾기 (0) | 2022.07.29 |
Comments