영어로 되있어서 주눅들 수 있지만, 이 문제는 결국 암호화된 숫자를 받아서 그것을 해독하는 것이다.
더 구체적으로 말하자면, 이 문제는 달팽이 모양 배열을 이용한 암호문과 암호문을 만들때 쓰인 배열의 크기를 받아, 해독하여 케이스의 숫자(몇 번째 케이스인지)와 해독문을 출력하는 것이다.
이 문제를 풀기 위하여 할 일을 번호로 나열해보자면,
1. 주어진 크기 (배열의 행과 열을 입력받는다)의 달팽이 배열을 만든다.
2. 배열에 암호문을 잘라 집어넣는다.
3. 배열을 달팽이 모양으로 탐색해가며 암호문을 해독한다(숫자를 알아낸다).
4. 알아낸 숫자를 문자로 치환한다.
정도가 되겠다.
내가 쓴 코드는 세 부분으로 나눌 수 있다.
코드1은 알파벳 출력을 위한 딕셔너리, 입력 받기, 배열에 암호문을 잘라 집어넣기를 포함한다.
코드2는 암호를 해독하는 부분이다.
코드3은 해독한 숫자 리스트를 가공하고, 딕셔너리에서 숫자에 해당하는 문자를 찾아서 출력한다.
코드 2는 혼자서 끙끙대다가 생각이 잘 떠오르지 않아서, 달팽이 배열을 출력하는 코드를 뒤집어 보기로 했다.
여럿 있었지만 내가 이용했던 것은 이 코드다. (이유는 내가 이해하기 쉬워서)
이 코드에선 출력을 할 때 함수를 썻지만, 만들기 귀찮아서 난 코드에 직접 썼다. 아무튼,
nbistr 배열의 0,0번째에서 시작해 0,c까지 numlist 배열에 넣는다. 그리고 c를 감소시키고 0,c부터 r,c까지 또 넣는다 (r도 1 감소시킨다). 이후엔 행과 열을 증가시켰던 inc의 값을 음수로 하여, r,c부터 r,0까지를 numlist에 넣는다. 그리곤 r,0부터 0,1까지를 넣고, 이 과정을 1,1부터 다시 시작하는 방식이다.
문제에서 쓴 예제도 잘 출력이 된다.
정답!
느낀점:
1. 달팽이 배열을 해독하는 방법이 생각이 잘 안나자 달팽이 배열 생성 코드를 이용해 해결한 것처럼, 하려고자 하는 것과 반대되는 것을 역이용해 코드를 짤 수 있다는 것을 알게 되었다.
2. 코드가 좀 긴데, 그래도 한번에 시간안에 실행이 잘 되어서 정말 다행이었다.
3. 이게 왜 다행이었냐면 월요일부터 계속해서 여러 문제를 조금씩 끄적이다가 다른문제로 갈아타는 것을 반복했기 때문이다. cakes문제, homuraarsenal문제, quantize문제 등등 한 10개정도를 대충 해보다 다른 문제로 옮기는 짓을 하다 가까스로 이 decode 문제에 정착해 풀게 되었다. 아마 이 문제도 못풀었으면 멘탈 터졌을듯...
4. 처음에 볼 때는 쉬워보였는데 달팽이 부분에서 애먹었다. 나중에 다시 문제가 생기면 오늘 작성한 것을 보고 도움을 받았으면 좋겠다.
'코테용 문제풀이 > 알고스팟' 카테고리의 다른 글
알고스팟 zeroone 문제 파이썬으로 풀기 (0) | 2019.07.16 |
---|---|
알고스팟 meeting 문제 파이썬으로 풀기 (0) | 2019.07.15 |
알고스팟 koogle 문제 파이썬으로 풀기 (0) | 2019.07.08 |
알고스팟 asymtiling 문제 파이썬으로 풀기 (0) | 2019.06.24 |
알고스팟 maxsum 문제 파이썬으로 풀기 (0) | 2019.06.24 |