[2024. 중등임용 정보ㆍ컴퓨터B] 아스키 코드와 암호문

아스키 코드와 암호문
아스키 코드와 암호문2

정답

㉠ rEDhAT, ㉡ DhATrE, ㄷ \( \text{code2(enc, s, 4)} \), ㄹ \( \text{code1(enc, s)} \)

출제 의도

문자열 처리 C 프로그램에서 아스키 코드 범위로 대소문자 변환 동작을 해석하고, 배열 인덱스의 모듈러 연산으로 구현된 순환 이동(회전) 암호를 분석하여 출력 결과와 복호화 절차(역연산 적용 순서)를 도출하는 능력을 평가한다.

풀이 과정

code1은 대문자(65~90)이면 32를 더해 소문자로 바꾸고, 소문자(97~122)이면 32를 빼 대문자로 바꾸므로, 문자열의 각 알파벳의 대소문자를 서로 뒤바꾸는 함수이다.

$$ \text{“RedHat”}\xrightarrow{\text{code1}}\text{“rEDhAT”} $$

따라서 밑줄 친 ㉠의 출력은 rEDhAT이다.

code2는 \( \text{enc[i] = temp[(i+n)\%s]} \)이므로, 길이 \(s\)의 문자열을 왼쪽으로 \(n\)칸 순환 이동시킨다. 여기서 \(s=6\), \(n=2\)이므로 “rEDhAT”을 왼쪽으로 2칸 회전한다.

$$ \text{“rEDhAT”}\xrightarrow{\text{code2}(n=2)}\text{“DhATrE”} $$

따라서 밑줄 친 ㉡의 출력은 DhATrE이다.

이제 ㉡ 실행 직후 enc는 “DhATrE”이다. 암호화가 \(\text{code1} \rightarrow \text{code2}(n=2)\) 순서였으므로, 복호화는 역순으로 \(\text{code2}\)의 역연산 후 \(\text{code1}\)을 적용한다. 왼쪽 회전 2칸의 역연산은 오른쪽 회전 2칸이며, 이는 왼쪽 회전 \(6-2=4\)칸과 같다.

$$ \text{“DhATrE”}\xrightarrow{\text{code2}(n=4)}\text{“rEDhAT”}\xrightarrow{\text{code1}}\text{“RedHat”} $$

따라서 빈칸에는 다음과 같이 넣는다.

$$ \text{ㄷ: code2(enc, s, 4); \qquad ㄹ: code1(enc, s);} $$

<풀이가 부정확할 수 있으니 반드시 교차검증 확인 바랍니다.>