๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐จ๐ปํ์ด ๊ณผ์
๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ ๋ฌด์จ ๋์๋ฆฌ ์ฌ๋๋ค์ด ์ด๋ฌ๊ณ ๋ ธ๋ ์ถ์์ต๋๋ค. ์นด์นด์ค์ ๊ฐ๋ ์ฌ๋๋ค์ ๋ค ์ ๋ฌ๊ณ ๋ ธ๋ ๊ฑธ๊น์?...
์๋ฌดํผ, ์ ๋ ์ด ๋ฌธ์ ์ ์๋๋ฅผ ํ์ ํ๊ธฐ ํ๋ค์ด์ ์๊ฐ์ด ์ข ๊ฑธ๋ ธ์ต๋๋ค. ๋ค์ ๋ด์ฉ์ ์ดํดํ๋ ๋ฐ ์ข ๊ฑธ๋ ธ์ด์.
ํ ์ฌ๋์ด ๋งํ๋ ์ซ์๋ ๋ฌด์กฐ๊ฑด ํ ์๋ฆฌ ์ซ์๋ค.
(์ญ์ง์ "3" -> ์ด์ง์ "11"๋ก ๋ณํํ๋๋ผ๋ ํ ์ฌ๋๋ง๋ค ํ ์๋ฆฌ์ฉ ์ฝ๋๋ค.)
์์ ์ธ n = 2, t = 4, m = 2, p = 1๋ก ๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ ์ญ์ง์ 0๋ถํฐ ์ฐจ๋ก๋๋ก 2์ง์๋ก ๋ณํํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์์.
// ์ญ์ง์ : 0 1 2 3 4 5 6 7 ...
// ์ด์ง์ : 0 1 10 11 100 101 110 111 ... -> ๋ค ์ด์ด๋ถ์ด๋ฉด 011011100101110111
์ญ์ง์ 0 ~7๋ฅผ ๋ณํํ ์ด์ง์๋ค์ ๋ชจ๋ ์ด์ด๋ถ์ด๋ฉด, "011011100101110111"์ด๋ผ๋ ๋ฌธ์์ด์ด ๋์ต๋๋ค. ๊ทธ๋ผ ์ฌ๊ธฐ์ ์ฌ๋์ ์(m)์ ๋ฌธ์ ์ ์ฃผ์ธ๊ณต์ธ ํ๋ธ์ ์๋ฒ(p), ํ๋ธ๊ฐ ๋งํด์ผ ํ๋ ํ์(t)๋ฅผ ํตํด ๊ณ์ฐํด์ผ ํฉ๋๋ค.
p๋ ์ต์๊ฐ์ด 1์ด๋ฏ๋ก, ๋ฌธ์์ด์ ์ฒซ ์์ ์ธ๋ฑ์ค์ธ 0๊ณผ ๋ง์ถ๋ ค๋ฉด p - 1์ ํด์ค์ผ ํฉ๋๋ค. ํ๋ธ์ ์ฒซ ์๋ฒ์ p - 1์ด๋ฏ๋ก, ๊ทธ ๋ค์ ์๋ฒ์ ์ด์ ํ๋ธ์ ์๋ฒ์์ ์ฌ๋ ์(m)๋งํผ ๋ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์์ ๋ก ์์๋ฅผ ๋ค๋ฉด, p = 1, m = 2, t = 4 ์ ๋๋ค.
// p - 1 = 0, m = 2์ด๋ฏ๋ก ์ฒซ ๋ฒ์งธ ์๋ฒ์ธ 0์ ์ด์ด m์ฉ ๋ํ๋ฉด 0, 2, 4, 6์ด ๋์ต๋๋ค.
// 0, 2, 4, 6์ ํด๋นํ๋ ์ธ๋ฑ์ค ์์ 'p' ํ์๋ฅผ ํ์์ต๋๋ค.
p p p p
011011100101110111
// p1 = 0, p2 = 1, p3 = 1, p4 = 1 ์ด๋ฏ๋ก, ๋ค ์ด์ด ๋ถ์ด๋ฉด ์ ๋ต์ด ๋ฉ๋๋ค.
// answer = "0111"
์ด๋ฐ ์์ผ๋ก ๋ณํํ ๋ฌธ์์ด์์ ํ๋ธ๊ฐ ๋งํด์ผ ํ ์ซ์์ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ ์ ์๊ณ , ๋งํ ํ์๊ฐ t๋ฒ์ด ๋๋ฉด ์ ๋ต์ ๋ฆฌํดํ๋ฉด ๋ฉ๋๋ค. ์ ๋ ๋ฌธ์ ์์ ์ด ๋ถ๋ถ์ ์ดํดํ๋ ๋ฐ ์ค๋ ๊ฑธ๋ ธ์ด์... ๊ทธ๋ผ, ํด์ผ ํ ์ผ๋ค์ ์ฐจ๋ก๋๋ก ๋ค์๊ณผ ๊ฐ์์.
์ญ์ง์๋ฅผ n์ง์๋ก ๋ณํํ๋ ๊ณผ์ ์ ์ฌ์ฐ๋, ์ด๋ ต์ง ์์์ต๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
char digitSystems[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
string GetConvertedDigit(int num, int n) {
string result;
while (true) {
int quotient = num / n;
int remainder = num % n;
result.push_back(digitSystems[remainder]);
if (quotient == 0)
break;
num = quotient;
}
reverse(result.begin(), result.end());
return result;
}
string solution(int n, int t, int m, int p) {
string numbers = "";
string answer = "";
int currentNum = 0;
int myTurnCount = 0;
int myTurnIndex = p - 1;
while (myTurnCount < t) {
string convertedDigit = GetConvertedDigit(currentNum, n);
numbers += convertedDigit;
if (myTurnIndex < numbers.length()) {
answer += numbers[myTurnIndex];
myTurnIndex += m;
myTurnCount++;
}
currentNum++;
}
return answer;
}
'๐คAlgorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv2. ๋ ๋ฐ๋จน๊ธฐ | C++ (0) | 2023.06.22 |
---|---|
[Programmers] Lv2. ์คํ์ฑํ ๋ฐฉ | C++ (0) | 2023.06.21 |
[Programmers] Lv2. ๋ ๋งต๊ฒ | C++ (0) | 2023.06.21 |
[Programmers] Lv2. k์ง์์์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ | C++ (0) | 2023.06.21 |
[Programmers] Lv2. ํ๊ฒ ๋๋ฒ | C++ (0) | 2023.06.20 |