Machineboy空
Excercism - Rail Fence Cipher : 지그재그, 1,-1 방향 조절 본문
문제요약


지그재그 암호문을 만들라!
난이도
Medium
풀이 포인트
- 0,1,2,1,0,1,2,1,0 지그재그 만들기 : 1,-1 로 방향 조절해주기
- null 병합자
- 람다식
충분히 많이 쓰이는 아이디어들이니 숙지해두자!
REVIEW
뇌가 굳은 건진 모르겠지만 너무 어려웠다.
항상 추천을 많이 받은 모범 풀이들은 내가 아직 익숙치 않은 LINQ를 쓴다거나,
내가 절대 구현할 수 없을 것 같은 화려한 풀이들이 많아서 좌절하게 되는데.. 그중에 발견한 아름다운 풀이.
정말 문제 설명 그대로 찬찬히 구현해 나가셨다.. 천재
어려운 문법 쓰지 않으면서도 깔끔하게 흐름이 보이도록 적혀있어서 정말 큰 도움..
지그재그 암호문을 만드는 문제인데, 수학적인 건 참 아름답다..
특정 정수와 암호 길이를 각 변의 길이로 하는 직사각형 배열에 완벽한 대칭의 지그재그 암호를 그려낼 수 있다는 것.
여튼 이후에 다른 곳에 적용해서 뭔가 시각적으로 활용해보고 싶다고 생각한 문제.
CODE
// 지그재그 문자열을 행별로 읽기
public string Encode(string input)
{
string[] rails = new string[_rails];
string output = string.Empty;
int index = 0;
Func<int, int> NextStep = (x) => x + 1;
foreach (char c in input)
{
rails[index] += c.ToString() ?? "";
if (index == _rails - 1) NextStep = (x) => x - 1;
else if (index == 0) NextStep = (x) => x + 1;
index = NextStep(index);
}
for (int i = 0; i < rails.Length; i++)
output += rails[i];
return output;
}
// 지그재그 문자열을 지그재그로 읽기
public string Decode(string input)
{
char[,] lines = new char[_rails, input.Length];
int row = 0;
int col = 0;
int inc = 1;
foreach (char c in input)
{
lines[row, col] = '?';
row += inc;
col++;
if (row < 0 || row >= _rails)
{
row -= 2 * inc;
inc = -inc;
}
}
string decoded = "";
int inputIndex = 0;
for (int firstDimIndex = 0; firstDimIndex < _rails; firstDimIndex++)
for (int secondDimIndex = firstDimIndex; secondDimIndex < input.Length; secondDimIndex++)
if (lines[firstDimIndex,secondDimIndex] == '?')
lines[firstDimIndex,secondDimIndex] = input[inputIndex++];
row = 0;
col = 0;
foreach (char c in input)
{
decoded += lines[row, col];
row += inc;
col++;
if (row < 0 || row >= _rails)
{
row -= 2 * inc;
inc = -inc;
}
}
return decoded;
}
'Computer > Coding Test' 카테고리의 다른 글
Excercism - Anagram (0) | 2025.01.24 |
---|---|
Excercism - Beer Song : 문자열 개행 (0) | 2025.01.24 |
Excercism - CryptoSquare : 문자열 ✅ (0) | 2025.01.22 |
Excercism - Binary Search : 이진탐색, 이진탐색 트리 (0) | 2025.01.22 |
Excercism - Resister Color : Dictionary, Array (0) | 2025.01.22 |