안녕하세요. 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. 채점
오늘도 읽어 주셔서 감사합니다.
제가 시간들여 작성한 포스팅이 당신에게 도움이 되었으면 좋겠습니다.
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[LeetCode] 1018. Binary Prefix Divisible By 5 Solution in C++ (0) | 2019.04.12 |
---|---|
[C++ operator overloading] Box it! (클래스, 연산자 오버로딩) (0) | 2018.12.01 |
[프로그래머스] LEVEL 1 : 핸드폰 번호 가리기 (C++) (1) | 2018.09.18 |
[프로그래머스] LEVEL 1 : 자릿수 더하기 (C++) (0) | 2018.09.17 |
[프로그래머스] LEVEL 1 : 문자열 다루기 기본(C++) (0) | 2018.08.15 |
[프로그래머스] LEVEL 1 : 나누어 떨어지는 숫자 배열(C++) (4) | 2018.08.05 |
[프로그래머스] LEVEL 1 : 가운데 글자 가져오기(C++) (0) | 2018.08.04 |
[Level 2] 콜라즈 추측 (0) | 2017.12.26 |