본문 바로가기
프로그래밍/프로그래머스

Lv2_[124 나라의 숫자, C++] 풀이 및 알고리즘 정리 - 프로그래머스

by 워킹독 2023. 3. 23.
728x90

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 내용, 조건, 예시는 프로그래머스 사이트 참조


알고리즘

  • 진수 변환에 문제는 mod(모드; %) 연산자를 활용하는 것이 효율적
  • 124나라는 3진수와 동일함

 

아래의 표에 필요한 계산값을 정리함

계산표1

패턴을 분석하면

  1. %(mod) 연산은 1, 2, 0 순으로 반복
    → string("412")로 구성 후 index 접근 가능
  2.  / (나눗셈) 연산은 0, 0, 1 패턴으로 반복
    → 3번째 값만 다른 2개의 값보다 1이 많음
    → 3개씩 묶어서 같은 자리수가 되기 때문에 3번째 값에는 -1을 해줌
  3. 나머지 값을 결과값 앞으로 붙임
    → 1의 자리부터 채워나감
  4. 나눗셈 몫이 0이 되면 종료
    → 0이 아니면 1)부터 다시 반복

계산표2


위의 조건을 만족해서 while문으로 구성해주면 완료!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <vector>
 
using namespace std;
 
std::string solution(int n) {
    std::string answer = "";
    int stand_num = 3;
 
    while (n > 0) {
        int remainder_result = n % stand_num;
        n = n / stand_num;
        
        if (remainder_result == 0) {
            n -= 1;
        }
 
        answer = "412"[remainder_result] + answer;
    }
 
    return answer;
}
cs

 

 

↓↓↓↓↓↓ 유익했다면 하트 뿅 ♥ ↓↓↓↓↓↓

 

728x90
반응형

댓글