<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[프로그래머스] LEVEL 1 : 자연수 뒤집어 배열로 만들기 (C++)

BlockDMask 2018. 8. 17. 08:30
반응형

안녕하세요.  BlockDMask 입니다.

아니 오늘은 아디다스 츄리닝 바지를 입고 나갔는데도 바지에 땀이;; 차는거에요.. 그것도 저녁 8시에 

너무 황당한 날씨였습니다.


0. 제목

프로그래머스(programmers) LEVEL 1 자연수 뒤집어 배열로 만들기 입니다.


1. 문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.

예를 들어 n이 23456이면 [6,5,4,3,2]의 배열을 리턴 합니다.

제한조건 - n 은 10,000,000,000이하인 자연수 입니다.


2. 풀이 과정

문제를 잘 읽어보면 그냥 뒤에서 부터(1의 자리수) 하나씩 배열에 집어 넣어라 입니다.

1000이라는 자연수가 들어오면 [0,0,0,1] 배열에 넣어서 반환 해주면됩니다.

이번에 이용할 연산자는 %(나머지), /(나누기) 이 두개 입니다. 이 두가지 연산자를 이용해서 수의 자릿수를 가지고 놀면되는 문제입니다.


나머지를 구하는 연산으로 무엇을 할 수 있을까요?

123456 % 10 은 어떤 것일까요? 

"10으로 나누었을때 나머지"이기 때문에 6이 나옵니다.

즉, (n % 10)을 이용함으로서 숫자 n의 1의 자리수를 가지고 올수 있습니다.


그럼 나누기 연산으로는 무엇을 할 수있을까요?

123456 / 10 은 어떤 것일까요?

12345.6 이겠죠? 이것을 int 타입이나 long long 타입처럼 정수형으로 나타나게 되면 자연스럽게 소수점 아래는 버려지겠죠?

네, 맞습니다. 맨뒤의 자리수를 하나씩 제거하는데 사용하면 됩니다.


% 연산으로 이용해서 맨 뒷자리를 얻어서 배열에 집어 넣고

집어 넣은 숫자를 / 연산을 이용해서 제거 합니다.

제거한 숫자를 다시 &연산을 이용해서 뒷자리를 얻어서 배열에 집어 넣고

집어 넣은 숫자를 다시 / 연산을 이요해서 제거 합니다.

(반복을 하다가 / 연산을 했을때 몫이 0 일때 멈추면 됩니다.)


이것을 눈에 보이게 예시를 들어보면.

12345 % 10  = 5

12345 /  10   = 1234

12345 % 10  = 4

12345 /  10   = 123

12345 % 10  = 3

12345 /  10   = 12

12345 % 10  = 2

12345 /  10   = 1

12345 % 10  = 1

12345 /  10   = 0  (THE END)


이런식으로 해서, %로 연산한 숫자를 하나씩 배열에 넣었다면 [5,4,3,2,1]이 들어가 있을 것 입니다. 아래 코드로 보겠습니다.



3. 소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>
#include <vector>
using namespace std;
 
vector<int> solution(long long n) {
    vector<int> answer;
    while(true)
    {
        answer.push_back(n%10);    //1의 자리수 가지고오기
        n = n/10;                //사용한 1의 자리수 제거
        if(n == 0)
        {
            break;
        }
    }
    return answer;
}
cs


4. 채점


<연관글>

2018/08/04 - [<알고리즘 문제풀이&연습>/[C++] 프로그래머스] - [프로그래머스] LEVEL 1 : 가운데 글자 가져오기(C++)

2018/08/05 - [<알고리즘 문제풀이&연습>/[C++] 프로그래머스] - [프로그래머스] LEVEL 1 : 나누어 떨어지는 숫자 배열(C++)

2018/08/15 - [<알고리즘 문제풀이&연습>/[C++] 프로그래머스] - [프로그래머스] LEVEL 1 : 문자열 다루기 기본(C++)


오늘도 읽어 주셔서 감사합니다.

제가 시간들여 작성한 포스팅이 당신에게 도움이 되었으면 좋겠습니다.

반응형