Insights/For KR

백준 2675번: 디버거로 분석하는 이스케이프 문자 처리

funczun 2024. 11. 16. 11:16
이스케이프 문자

 이스케이프 문자는 문자열 내에서 특별한 역할을 한다. 그리고 일반적으로 백슬래시(\)가 이스케이프 문자로 쓰인다. 이스케이프 문자는 바로 뒤에 오는 문자와 조합하여 다양한 특수 기능을 하기 때문에 취급에 주의해야 한다.

 

이스케이프 시퀀스
\n 줄 바꿈
\t
\\ 백슬래시
\' 작은따옴표
\" 큰따옴표

 

디버깅을 통해 이스케이프 문자 처리 확인하기

 \uXXXX는 유니코드 이스케이프 시퀀스다. 따라서 \u03B1은 그리스 문자 α를 나타낸다.

 문자열로 변수 test1에 할당한 경우 'α'가 할당되었으며, 원시 문자열로 변수 test2에 할당한 경우 '\\u03B1'가 할당된 것을 확인해 볼 수 있다. 참고로 원시 문자열이라고 함은 문자열 앞에 r을 붙여 표시한 것을 말한다.

 

 디버깅을 해보며 알게 된 사실은 내가 문자열을 표현하기 위해 쓴 큰따옴표("")가 메모리상에서는 작은따옴표('')로 표시되었다는 것과 이스케이프 문자인 백슬래시가 원시 문자열의 경우 두배로 기록되었다는 것이다.

 

이스케이프 문자가 사용자 입력에 의해 입력되었다면?

 문자열 내에서 백슬래시는 기본적으로 이스케이프 문자로 취급된다. 그렇기에 백슬래시와 같은 이스케이프 문자를 고려하여, 원시 문자열 형식으로 코드를 짜기 마련이다.

 

 그런데 백준 2675번 문제에서는, 사용자 입력, 즉 input() 메서드 또는 sys.stdin.readline() 메서드의 경우,  원시 문자열 형태로 코드를 짜지 않아도 입력한 문자열이 그대로 출력되었다.

 직접 디버깅하며 확인한 결과, 사용자 입력 시 이스케이프 문자가 두배로 기록된 것을 확인할 수 있었다. 사용자의 경우 이스케이프 문자를 입력할 리 없다는 가정 하에, 문자를 그대로 할당하기 위해 메모리상에서 마치 원시 문자열처럼 기록하는 것이다.