티스토리 뷰
누가 이런겜을 하는지
입출력 예제
n : 2
t : 4
m : 2
p : 1
result : "0111"
해결 방법
가장 중요한 것은 N진수를 만드는 방법이라고 생각합니다
20이라는 숫자있고 4진수로 만들고 싶으면
4|20
4| 5 ....0
4| 1 ....1
4| 0 ....1
이 방식대로 110이 나온다
중요한건 마지막에 나눈 값이 숫자의 가장 높은 자릿수가 되버린다. LIFO이기 때문에 스택방식으로 저장해서 빼낼 수 있지만
값을 20을 4로 나누고 0 데이터 넣고 (0)
그다음 5를 4로 나누고 1 데이터를 0 앞에다 넣고 (10)
그다음 1을 4로 나누고 1 데이터를 10 앞에다 넣어버리면 된다.
이렇게 값을 다 구했으면 튜브가 말해야 하는 위치를 골라서 answer에 넣어주면 된다.
소스 코드
#include <string> #include <vector> using namespace std; string solution(int n, int t, int m, int p) { string answer = ""; string value = "0"; vector<string> number = { "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F" }; bool flag = true; int i = 1; int count= 1; while(count<t*m){ flag = true; string temp = ""; int num = i; while (flag) { if (num / n == 0) flag = false; temp.insert(0,number[num%n]); num /= n; } count += temp.size(); value += temp; i++; } for(int i=0,j=0;i<count&&j<t;i++){ if (i%m == p - 1) { answer += value[i]; j++; } } return answer; }
'알고리즘 > 프로그래머스(C++)' 카테고리의 다른 글
[프로그래머스/알고리즘] 파일명 정렬 (0) | 2019.02.18 |
---|---|
[프로그래머스/알고리즘] 자동완성 (0) | 2019.02.18 |
[프로그래머스/알고리즘] 압축 (0) | 2019.02.18 |
[프로그래머스/알고리즘] N으로 표현 (0) | 2019.02.12 |
[프로그래머스/알고리즘] 셔틀버스 (0) | 2019.02.11 |