[문제 링크]
[문제 분석]
문제에 숨겨진 힌트를 찾아서 정답을 추리하는 문제 (BOJ의 대표적인 난제 중 하나!!)
[풀이]
이 문제의 제목이 '占쏙옙'인데요,
이는 (사이트의) 인코딩 오류로 종종 보실 수도 있습니다.
이제 본격적인 풀이를 알려드리겠습니다.
먼저, 이 문제의 힌트 부분에서 '占', '쏙', '옙' 부분을 모두 지워보세요. 아래의 문장이 나옵니다.
이문제는예제를채점하지않습니다.
데이터는한개입니다
입력을받을필요는없다
여기에서 '데이터는 1개'라는 부분에 주목해주세요. (여기부터가 핵심입니다!!)
'占쏙옙'의 각 문자를 'EUC-KR'로 인코딩 해보세요. (값은 16진수로 표기하였습니다.)
占 : EFBF
쏙 : BDEF
옙 : BFBD
그리고, 3개의 코드를 하나로 이어 붙이면,
EFBFBDEFBFBD
위와 같이 나오게 됩니다.
여기에서 무언가 보이시나요?
바로, 'EFBFBD'가 2번 반복된다는 것입니다.
여기에서 'EFBFBD'를 'UTF-8'로 인코딩 해보세요. (여기에서 마법같은 일이 일어나요!!)
�
위의 문자가 나오게 됩니다.
조금 전에 '데이터는 1개'라고 언급했는데요,
그것이 바로 '�' 문자입니다.
이 문자 '1개'를 출력하시면 됩니다. (딱 1개만!!)
[보충 설명]
이 문제의 제출 언어를 'Text'로 하신다면, '�' 1개를 입력하시면 됩니다.
만약, 많이 사용되는 C언어로 하시게 된다면, 한 가지 짚어드리고자 합니다.
(C언어를 사용하신다고 해도 puts와 같은 출력 함수로 직접 '�'를 출력하셔도 무방합니다.)
'�' 문자가 1바이트가 아니기 때문에,
char 배열로 저장 후 문자열 형식으로 출력하셔야 합니다. 즉, 0xEF, 0xBF, 0xBD를 나누어서 저장하셔야 합니다.
(저도 처음에 이 점을 몰라서 틀렸죠 ㅠ.ㅠ)
그리고 여기에서 '\0'을 잊지 말아주세요!! (문자열의 끝을 표시해주는 매우 중요한 값이에요!!)
[소스 코드 (Text)]
�
[소스 코드 (C언어)]
#include <stdio.h>
int main(void){
char c[]={0xEF,0xBF,0xBD,0};
puts(c);
return 0;
}
만약 틀린 부분이 있다면 지적 부탁드릴게요~! (댓글 환영!!)