프로그래머스 - 124 나라의 숫자
이건 규칙만 알면 위 그림처럼 효율성 flex까지 해낼 수 있는 문제이다.
그래서 그 규칙이 뭐냐?
만약 char arr[3] = {'1', '2', '4'} 라는 게 있다고 치면
숫자 n을 일단 3으로 나눈 '나머지 - 1'을 인덱스로 해서 보면
숫자 1의 answer 는 1, 숫자 2의 answer는 2가 된다.
그런데 3의 경우는 저런 규칙이 적용되지 않는데,
3의 경우만 특별 케이스로 관리해 '4'를 넣어주도록 하자.
그러면 3은 우리 의도대로 '4'를 뱉어낼 것이다.
이 때 문자를 삽입하는 위치는 문자열의 맨 앞이어야 한다.
4,5,6,7, ... 하다보면 문자열의 맨 앞에 위 공식을 대입했을 때 어떤 규칙이 보일 것이다.
3으로 나눈 나머지가 1, 2인 경우에는 n을 3으로 나누면 되고,
3으로 나눈 나머지가 0인 경우에는 n을 3으로 나눈 뒤 1을 빼면 끝이다.
이 공식을 적용한 답안은 다음과 같다:
#include <string>
#include <vector>
using namespace std;
string solution(int n) {
string answer = "";
char arr[3] = {'1', '2', '4'};
while (n >= 1)
{
if (n % 3 != 0)
{
answer.insert(answer.begin(), arr[(n % 3) - 1]);
n /= 3;
}
else
{
answer.insert(answer.begin(), '4');
n = (n / 3) - 1;
}
}
return answer;
}
'Algorithm' 카테고리의 다른 글
프로그래머스 키패드 누르기 [Swift] (0) | 2021.06.26 |
---|---|
프로그래머스 구명보트 [C++] (0) | 2021.06.17 |
프로그래머스 - 예상 대진표 [C++] (0) | 2021.06.06 |
프로그래머스 - 게임 맵 최단거리 [C++] (0) | 2021.06.05 |
프로그래머스 단체사진 찍기 c++ (0) | 2021.05.29 |
최근댓글